【问题标题】:Python Regex match numbers after wordsPython 正则表达式匹配单词后的数字
【发布时间】:2021-10-08 21:24:30
【问题描述】:

我希望使用正则表达式分别匹配以下类型字符串中包含的数字:

https://www.pizza.com/word1/685185197419/word2/980054970331342/

输出:

w1 = 685185197419
w2 = 980054970331342

我正在使用这个表达式,但它不能正常工作:\word1(.*)[0-9]\/

【问题讨论】:

  • 它不能正常工作”不是一个有用的问题陈述。它有什么作用?您期望它会做什么? How to Ask
  • 只用word1/(\d+)/word2/(\d+) ? re.findall(r"word1/(\d+)/word2/(\d+)", s)
  • 您可以使用交替匹配任何单词,然后捕获第 1 组中的数字 /(?:word1|word2)/(\d+)(?=/)

标签: python python-3.x regex regex-group regex-negation


【解决方案1】:

您需要指定在哪里可以找到每个数字序列。另外,你可以使用命名组,它可以匹配你想要的变量在最后

s = "https://www.pizza.com/word1/685185197419/word2/980054970331342/"

r = re.match(r"^.*word1/(?P<w1>\d+)/word2/(?P<w2>\d+)/$", s)

w1 = r.group("w1")
w2 = r.group("w2")

【讨论】:

    【解决方案2】:

    试试这个pattern:

    (?<=word[12]\/)\d+
    

    例子:

    import re
    
    text = 'https://www.pizza.com/word1/685185197419/word2/980054970331342/'
    w1, w2 = re.findall('(?<=word[12]\/)\d+', text)
    print(w1, w2, sep='\n')
    

    打印:

    685185197419
    980054970331342
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-08
      • 1970-01-01
      • 1970-01-01
      • 2013-06-10
      • 2015-12-13
      • 2014-03-14
      相关资源
      最近更新 更多