захватить действительное число через запятую python регулярное выражение - PullRequest
1 голос
/ 02 марта 2020

Я работаю с многострочной строкой, пытаясь захватить в строке действительные числа, разделенные запятыми.

Например:

my_string = """42     <---capture 42 in this line
1,234    <---capture 1,234 in this line
3,456,780    <---capture 3,456,780 in this line
34,56,780    <---don't capture anything in this line but 34 and 56,780 captured
1234    <---don't capture anything in this line but 123 and 4 captured
"""

В идеале я хочу re.findall вернуть:

['42', '1,234', '3,456,780']

Вот мой код:

a = """
42
1,234
3,456,780
34,56,780
1234
"""
regex = re.compile(r'\d{1,3}(?:,\d{3})*')
print(regex.findall(a))

Результат с моим кодом выше:

['42', '1,234', '3,456,780', '34', '56,780', '123', '4']

Но мой желаемый результат должен быть:

['42', '1,234', '3,456,780']

Ответы [ 2 ]

3 голосов
/ 02 марта 2020

Если вы хотите захватить только целые строки, которые соответствуют шаблону, вам нужно привязать регулярное выражение с ^ и $ и использовать флаг re.MULTILINE, чтобы они соответствовали началу / концу строки, а не только строке начало / конец.

regex = re.compile(r'^\d{1,3}(?:,\d{3})*$', re.MULTILINE)
1 голос
/ 02 марта 2020

Используйте обходные пути, чтобы убедиться, что у нас нет ди git или запятой до и после чисел:

import re

a = """
42
1,234
3,456,780
34,56,780
1234
"""
regex = re.compile(r'(?<![\d,])\d{1,3}(?:,\d{3})*(?![\d,])')
print(regex.findall(a))    

Вывод:

['42', '1,234', '3,456,780']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...