我想在这些字符串之间输入数字。
strings = ["point_right: account ISLAMIC: 860328 9221 asdsad",
"account 723123123",
"account823123213",
"account 823.123.213",
"account 823-123-213",
"account:123213123 ",
"account: 123213123 asdasdsad 017-299906",
"account: 123213123",
"point_right: account ISLAMIC: 860328 9221"
]
结果应为
[860328 9221,723123123, 823123213, 823.123.213, 823-123-213, 123213123, 123213123, 123213123]
然后我可以进行处理,以使它们成为数字。到目前为止,我的策略是将所有内容放在模式之后,将所有内容放在字母之前。我尝试过:
for string in strings:
print(re.findall("(?<=account)(.*)", string.lower()))
请帮助提供一些有关正则表达式匹配的指针。
答案 0 :(得分:1)
尝试以下模式:
(?=[^0-9]*)[0-9][0-9 .-]*[0-9]
故障:
(?=[^0-9]*)
预搜索不匹配的单词,例如“帐户” [0-9]
查找数字[0-9 .-]*
查找任意数量的数字或特殊字符(在您的字符串中,您可以使用空格,破折号,句号,因此我将其包括在内)[0-9]
查找另一个数字(以防止在末尾出现空格)答案 1 :(得分:0)
(?!\W)([\d\s.-]+)(?<!\s)
负面的前瞻性和后视性似乎在这里是过大的杀伤力,但否则我无法获得明确的匹配。您可能会看到结果here
(?!\W)
负向查找以排除所有非单词字符[^a-zA-Z0-9_]
([\d\s.-]+)
您的电话号码的捕获组
(?<!\s)
负向后查找以排除空格字符[\r\n\t\f\v ]
答案 2 :(得分:0)
如果数字必须是account
子字符串之后的第一个数字,则使用
re.findall("account\D*([\d\s.-]*\d)", s)
模式详细信息
account
-文字子字符串\D*
-除数字以外的0多个字符([\d\s.-]*\d)
-捕获组1(由re.findall
返回的值):0个或多个数字,空格,.
和-
字符,后跟一个数字。