Совпадение с 2 цифрами через запятую (цифры с плавающей запятой не включены) - PullRequest
1 голос
/ 06 марта 2019

Для каждого строкового ввода мне нужно сопоставить только 2 цифры (или много) (которые должны быть разделены пробелом или запятой + пробел (не запятая + цифра).

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

def cleanse_no(string):
    regex = r"(?:^|\s)(\d{2})\b"
    string = str(string).strip(" .,€")
    list_digits = re.findall(regex, string)
    digits = ", ".join(list_digits)
    return digits

test_digits = ["€ 22.22", ". 23,600.90", "25 45 61", "22, 232, 36, 02,", "1, 23, 456"]
for test_dgt in test_digits:
    print(test_dgt,"-------find_no--------->",cleanse_no(test_dgt))

Я получаю эти результаты:

€ 22.22 -------find_no---------> 22
. 23,600.90 -------find_no---------> 23
25 45 61 -------find_no---------> 25, 45, 61
22, 232, 36, 02, -------find_no---------> 22, 36, 02
1, 23, 456 -------find_no---------> 23

Есть идеи?

1 Ответ

2 голосов
/ 06 марта 2019

Вы можете использовать

def cleanse_no(s):
    regex = r"(?<!\S)\d{2}(?=,?(?:\s|$))"
    return ", ".join(re.findall(regex, s))

См. Демо Python и демо regex .

Детали шаблона

  • (?<!\S) - левая граница пробела
  • \d{2} - две цифры
  • (?=,?(?:\s|$)) - непосредственно справа от текущей позиции, необязательная запятая с пробелом или концом строки.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...