正则表达式匹配数字介于两者之间



我想在这些字符串之间获取数字。

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 个或多个数字、空格、.- 个字符后跟一个数字。

最新更新