Как использовать регулярные выражения для поиска чисел с запятой после конкретной строки в Python? - PullRequest
1 голос
/ 27 марта 2019

как найти числа с запятой после определенной строки, используя регулярное выражение python3?

import re
word = re.search(r'sum RM (\d+) \d+(?:,\d+)?', 'sum RM 320,000.00')
print(word)


 Expected:
 RM 320,000.00

Ответы [ 3 ]

1 голос
/ 27 марта 2019

re.search возвращает группы совпадений, которые вам нужно захватить:

import re

word = re.search(r'sum (RM \d+(?:,\d+)(?:.\d+)?)', 'sum RM 320,000.00')
print(word.group(1))

# RM 320,000.00
1 голос
/ 27 марта 2019

Если вы хотите не только сопоставлять числа с , в нем, но и если эти числа должны соответствовать стандарту добавления запятой после каждых 3 цифр для целей чтения, используйте регулярное выражение:

r'sum (RM [0-9]{1,3}(:?,[0-9]{3})+(:?\.[0-9]+)?)'

Пояснения:

  • [0-9]{1,3} от 1 до 3 цифр в диапазоне [0-9], если вы используете \d, вы также будете принимать цифры Unicode, такие как: 112233
  • (:?,[0-9]{3})+запятая, за которой следует некоторая группа из 3 цифр ascii, повторяемых от 1 до N раз, причем N является целым числом> 1
  • (:?\.[0-9]+)? в конечном итоге некоторая десятичная часть

код:

import re

#to match only numbers with comma every 3 digits
regex = r'sum (RM [0-9]{1,3}(:?,[0-9]{3})+(:?\.[0-9]+)?)'

print(re.search(regex, 'sum RM 320,000.00').group(1) if re.search(regex, 'sum RM 320,000.00') else None)
print(re.search(regex, 'sum RM ,,,').group(1) if re.search(regex, 'sum RM ,,,') else None)
print(re.search(regex, 'sum RM 3,00').group(1) if re.search(regex, 'sum RM 3,00') else None)
print(re.search(regex, 'sum RM 3123,000').group(1) if re.search(regex, 'sum RM 3123,000') else None)
print(re.search(regex, 'sum RM 31,000').group(1) if re.search(regex, 'sum RM 31,000') else None)
print(re.search(regex, 'sum RM 312,000').group(1) if re.search(regex, 'sum RM 312,000') else None)
print(re.search(regex, 'sum RM 312,00').group(1) if re.search(regex, 'sum RM 312,00') else None)

выход:

RM 320,000.00
None
None
None
RM 31,000
RM 312,000
None
0 голосов
/ 27 марта 2019

попробуйте это:

import re
word = re.findall(r'sum (RM [0-9,.]*)', 'sum RM 320,000.00')
print(word)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...