我想在这些字符串之间找到一个数字。你知道吗
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()))
请帮助给一些关于正则表达式匹配的指针。你知道吗
如果数字必须是
account
子字符串使用之后的第一个数字参见Python demo和regex demo。你知道吗
图案细节
account
-文字子串\D*
-0+数字以外的字符([\d\s.-]*\d)
-捕获组1(由re.findall
返回的值):0个或多个数字、空格、.
和-
字符后跟一个数字。你知道吗尝试以下模式:
分解:
(?=[^0-9]*)
查找单词,如“account”,不匹配[0-9]
找到一个数字[0-9 .-]*
查找任意数量的数字或特殊字符(在字符串中有空格、破折号和句点,所以我将它们包括在内)[0-9]
查找另一个数字(以防止在末尾出现空格)查看here,并查看示例代码here
消极的向前看和向后看在这里似乎有点过分,但我没能得到一个干净的比赛,否则。你可以看到结果here
(?!\W)
负向前看以排除任何非单词字符[^a-zA-Z0-9_]
([\d\s.-]+)
您的号码的捕获组(?<!\s)
用于排除空白字符的负查找[\r\n\t\f\v ]
相关问题 更多 >
编程相关推荐