Если вам нужна плоская группировка на основе двух или более свойств, используйте обратный вызов _.groupBy()
, чтобы объединить свойства в строку:
const addArray = [{"id":24,"language_id":3,"type":"service","type_id":2,"key":"service seeker","value":" need service"},{"id":23,"language_id":3,"type":"service","type_id":2,"key":"phone","value":"phone number"},{"id":24,"language_id":3,"type":"service","type_id":7,"key":"tester","value":"service tester"},{"id":19,"language_id":3,"type":"offer","type_id":4,"key":"source","value":"resource"}]
const result = _.groupBy(addArray, o => `${o.type}-${o.type_id}`)
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
[ 1116] Если вам нужна многоуровневая группировка, начните с группировки по type
, затем сопоставьте группы с _.values()
и снова сгруппируйте их по type_id
:
const { flow, partialRight: pr, groupBy, mapValues } = _
const fn = flow(
pr(groupBy, 'type'),
pr(mapValues, g => groupBy(g, 'type_id'))
)
const addArray = [{"id":24,"language_id":3,"type":"service","type_id":2,"key":"service seeker","value":" need service"},{"id":23,"language_id":3,"type":"service","type_id":2,"key":"phone","value":"phone number"},{"id":24,"language_id":3,"type":"service","type_id":7,"key":"tester","value":"service tester"},{"id":19,"language_id":3,"type":"offer","type_id":4,"key":"source","value":"resource"}]
const result = fn(addArray)
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
Add a space before the \d+.
>>> s = "This must not b3 delet3d, but the number at the end yes 134411"
>>> s = re.sub(" \d+", " ", s)
>>> s
'This must not b3 delet3d, but the number at the end yes '
Edit: After looking at the comments, I decided to form a more complete answer. I think this accounts for all the cases.
s = re.sub("^\d+\s|\s\d+\s|\s\d+$", " ", s)
Решение без регулярного выражения:
>>> s = "This must not b3 delet3d, but the number at the end yes 134411"
>>> " ".join([x for x in s.split(" ") if not x.isdigit()])
'This must not b3 delet3d, but the number at the end yes'
Разбивает на ""
и проверяет, является ли чанк числом, выполняя str (). Isdigit ()
, затем соединяет их вместе. Более подробно (без использования понимания списка):
words = s.split(" ")
non_digits = []
for word in words:
if not word.isdigit():
non_digits.append(word)
" ".join(non_digits)
To handle digit strings at the beginning of a line as well:
s = re.sub(r"(^|\W)\d+", "", s)
Я не знаю, как выглядит ваша реальная ситуация, но большинство ответов выглядят так, как будто они не обрабатывают отрицательные числа или десятичные числа,
re.sub (r "(\ b | \ s + \ -? | ^ \ -?) (\ d + | \ d * \. \ d +) \ b "," ")
Вышесказанное также должно обрабатывать такие вещи, как,
" Это не должно b3 delet3d, но число в конце да -134.411 "
Но это все еще не полностью - вам, вероятно, нужно более полное определение того, что вы можете ожидать найти в файлах, которые нужно проанализировать.
Редактировать: это Также стоит отметить, что «\ b» меняется в зависимости от используемой локали / набора символов, поэтому вам нужно быть немного осторожнее с этим.
If your number is allways at the end of your strings try : re.sub("\d+$", "", s)
otherwise, you may try re.sub("(\s)\d+(\s)", "\1\2", s)
You can adjust the back-references to keep only one or two of the spaces (\s match any white separator)
Try this:
"\b\d+\b"
That'll match only those digits that are not part of another word.
Использование \ s
не очень хорошо, так как не обрабатывает вкладки, и др. Первое сокращение в лучшем решении:
re.sub(r"\b\d+\b", "", s)
Обратите внимание, что шаблон является необработанной строкой, потому что \ b
обычно является escape-символом возврата для строк, и вместо этого мы хотим использовать специальный экранирующий символ regex. Немного более причудливая версия:
re.sub(r"$\d+\W+|\b\d+\b|\W+\d+$", "", s)
, которая пытается удалить начальные / конечные пробелы, когда есть цифры в начале / конце строки. Я говорю «пытается», потому что если в конце есть несколько чисел, у вас все еще есть пробелы.