对于每个字符串输入,我只需要匹配一个(或多个)两位数字(需要用空格或逗号+空格(不是逗号+数字)分隔)。
在以下情况下,您将看到一些示例的结果。我不希望我的正则表达式抓住前两个例子。
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
有什么想法吗?
答案 0 :(得分:2)
您可以使用
def cleanse_no(s):
regex = r"(?<!\S)\d{2}(?=,?(?:\s|$))"
return ", ".join(re.findall(regex, s))
模式详细信息
(?<!\S)
-空格左边界\d{2}
-两位数字(?=,?(?:\s|$))
-当前位置的右边,必须有一个可选的逗号,后跟空格或字符串结尾。