【问题标题】:Regex remove numerics between two strings正则表达式删除两个字符串之间的数字
【发布时间】:2017-06-20 06:17:19
【问题描述】:

我正在尝试检索一个字符串,使用正则表达式忽略其他两个字符串之间的所有数字

在下面的示例中,ABC、DEF 和 HIJ 将始终是相同的值,并且位于被搜索字符串的相同位置,但 123 和 456 将始终是不同的值和长度。

我的示例字符串是:

"ABC 123 456 DEF HIJ"

我试图留下以下结果:

"DEF"

我可以通过使用两行来做到这一点

r'ABC (.*) HIJ' 

这让我有 123 456 DEF 我可以:

r'[^0-9\s]' 

这似乎应该是可能的,但我真的无法弄清楚它是否是。

【问题讨论】:

  • 您要查找的词是否总是排在最后一个词?只是出于好奇,我希望它并不总是 DEF :)
  • HIJ 永远是最后一个,ABC 永远是第一个
  • 我想知道您是否可以利用您正在寻找句子末尾的倒数第二个单词这一事实来想出一些简短的内容。
  • 你应该展示一个真实的例子。
  • 如果我对你们俩都投了赞成票,我会滥用矛盾吗?

标签: python regex


【解决方案1】:

在正则表达式中,\d+ 将匹配 1 个或多个数字(贪婪)。

>>> import re
>>> s = "ABC 123 456 DEF HIJ"
>>> pat = r'ABC \d+ \d+ (.*) HIJ'
>>> re.findall(pat, s)
['DEF']

【讨论】:

    【解决方案2】:

    根据输入数据中的确切内容,您可以尝试提取第二个“单词”,允许(并忽略)具有如下模式的干预数字字符串:

    foo = "ABC 123 456 DEF 456 HIJ"
    pat = r'\w+\s+[\d ]*(\w+)[\d ]*\w+'
    re.findall(pat, foo)
    ['DEF']
    

    或者,正则表达式可能不是最简单的方法。您可以使用单个正则表达式去除所有数字字符,将剩余的字符串拆分为空格,然后获取第二个元素。

    【讨论】:

    • 显然工作人员发现您从南极洲发送了这个答案。干得好,回答好,presumably the first 发送来自第 7 大陆的帖子!
    【解决方案3】:

    正则表达式怎么样:(因第一条评论而更新)

    ([A-Za-z]+)\[A-Za-z]+$

    它将捕获在行尾用空格分隔的 2 个单词中的第一个。

    import re
    
    s = "ABC 123123123 1231231234 DEF HIJ"
    pat = r'([A-Za-z]+)\ [A-Za-z]+$'
    a = re.findall(pat,s)
    print (a)
    

    给出'DEF'

    要在该位置捕获多个单词,您可以将模式修改为:

    r'\ ([A-Za-z\ ]+)\ [A-Za-z]+$'
    

    对于 ABC 234234 46456456 DEF ZYX​​ HIJ 的输入,这将为您提供“DEF ZYX​​”。

    如果您想强制第一个字符串必须是 ABC,最后一个字符串必须是 HIJ,那么wim 的另一个答案就可以了。

    【讨论】:

    • 看看ascii表你就会明白[A-z]不是你想的那样,不只包含字母。
    • 该死的标点符号,应该坚持使用 [A-Za-z]。更新以反映您的意见。必须承认,自从我使用 ALT 代码构建“UI”以来,我还没有查看过 ASCII 表。
    【解决方案4】:

    基于“ABC、DEF 和 HIJ 将始终是相同的值,并且在被搜索字符串的相同位置,但 123 和 456 将始终是不同的值和长度”:

    >>> re.sub("ABC \d+ \d+ DEF HIJ", "DEF", "foo1 ABC 12345 67890 DEF HIJ foo2")
    'foo1 DEF foo2'
    

    【讨论】:

      猜你喜欢
      • 2018-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多