正则表达式匹配中间的数字?

2024-05-19 07:08:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在这些字符串之间找到一个数字。你知道吗

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()))

请帮助给一些关于正则表达式匹配的指针。你知道吗


Tags: 字符串rightforstring字母数字account策略
3条回答

如果数字必须是account子字符串使用之后的第一个数字

re.findall("account\D*([\d\s.-]*\d)", s)

参见Python demoregex demo。你知道吗

图案细节

  • account-文字子串
  • \D*-0+数字以外的字符
  • ([\d\s.-]*\d)-捕获组1(由re.findall返回的值):0个或多个数字、空格、.-字符后跟一个数字。你知道吗

尝试以下模式:

(?=[^0-9]*)[0-9][0-9 .-]*[0-9]

分解:

  • (?=[^0-9]*)查找单词,如“account”,不匹配
  • [0-9]找到一个数字
  • [0-9 .-]*查找任意数量的数字或特殊字符(在字符串中有空格、破折号和句点,所以我将它们包括在内)
  • [0-9]查找另一个数字(以防止在末尾出现空格)

查看here,并查看示例代码here

(?!\W)([\d\s.-]+)(?<!\s)

消极的向前看和向后看在这里似乎有点过分,但我没能得到一个干净的比赛,否则。你可以看到结果here

(?!\W)负向前看以排除任何非单词字符[^a-zA-Z0-9_]

([\d\s.-]+)您的号码的捕获组

(?<!\s)用于排除空白字符的负查找[\r\n\t\f\v ]

相关问题 更多 >

    热门问题