我想在这些字符串之间获取数字。
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-9]*)[0-9][0-9 .-]*[0-9]
故障:
-
(?=[^0-9]*)
预视单词,例如"帐户",不匹配 -
[0-9]
查找数字 -
[0-9 .-]*
查找任意数量的数字或特殊字符(在您的字符串中,您有空格、破折号、句点,所以我包括了这些) -
[0-9]
查找另一个数字(以防止末尾出现空格)
在此处查看,在此处查看示例代码
(?!W)([ds.-]+)(?<!s)
消极的展望和后视在这里似乎是矫枉过正,但否则我无法获得干净的匹配。您可以在此处查看结果
(?!W)
否定前瞻以排除任何非单词字符[^a-zA-Z0-9_]
([ds.-]+)
号码的捕获组
(?<!s)
否定后视以排除空格字符[rntfv ]
如果数字必须是account
子字符串后的第一个数字,请使用
re.findall("accountD*([ds.-]*d)", s)
请参阅 Python 演示和正则表达式演示。
图案详细信息
-
account
- 文本子字符串 -
D*
- 0+ 数字以外的字符 -
([ds.-]*d)
- 捕获组 1(re.findall
返回的值):0 个或多个数字、空格、.
和-
个字符后跟一个数字。