【问题标题】:Python building a Regex pattern?Python 构建正则表达式模式?
【发布时间】:2019-02-15 01:07:59
【问题描述】:

我正在使用此代码,但很难找到正确的模式。我可以通过更改 re.sub 来实现这一点,但如果可能的话,我想在不使用 re.sub 的情况下进行匹配。

var = "77777 11111 12891 22222 i"
  1. 来自var 我只想得到11111。喜欢我的代码:

    ppat = re.findall(r'(77777 (?:[\d]{1,6}))', var)
    
  2. 来自var 我想在"i" 之前得到22222,如下所示:

    opat = re.findall(r'((?:[\d]{1,6}) i)', var)
    
  3. 如何匹配这两种模式?例如,我将不同的输出放入将由模式匹配的变量?

一个。第一个可能的输出是:

output = "ndescr:  XXXX"

b.我应该使用什么模式来匹配XXXX 和输出变量的实例看起来像这样,我只想获得No entries。我应该使用什么正则表达式模式?

output = "%  No entries found for the selected source(s)" 

谢谢

【问题讨论】:

  • 您对捕获组和非捕获组的使用相当奇怪。出于某种原因,您总是将整个模式包装在一个不必要的捕获组中,而您将您感兴趣的部分包装在一个非捕获组中,就好像这会做一些有用的事情一样。
  • 信息不足,无法得出实用的样本提取模式。仅根据原始问题中的内容,您可以使用re.findall(r'(0{4,7}|2{4,7}|3{4,7}|4{4,7}|5{4,7}|6{4,7}|7{4,7}|8{4,7}|9{4,7})\s+(\d+)\s+\d+', var)[0][1]
  • 你的问题还不清楚。您是否要获取77777 后面的数字中的第二个数字?您是否试图将这些都纳入一个或两个变量中?

标签: python regex python-3.x python-2.7


【解决方案1】:

虽然尚不完全清楚您要匹配的内容,但我试了一下。

如果您只是想获取第二个和最后一个元素,那么可以不使用正则表达式。

var = "77777 11111 12891 22222 I"

elements = var.split(" ") # Take the string, and split it into a list on spaces.

first_number = elements[1] # Get the second element ("11111").

second_number = elements[-2] # Get the second element from the end ("22222").

或者,如果您真的想使用正则表达式或正在寻找77777 之后的数字,则可以使用这样的正则表达式:

import re
var = "77777 11111 12891 22222 I"

# Finds the 5 numbers that follows a "7" repeated 5 times (with a space in between).
first_number = re.search("(?<=7{5}\s)\\d{5}", var).group()

# Find the 5 numbers that precedes an "I" (with a space in between).
second_number = re.search("\\d{5}(?=\sI)", var).group()

【讨论】:

    【解决方案2】:
    re.findall("(?<=77777)\\s+(?:\\d{1,6})",var)
    re.findall("(?:\\d{1,6})\\s+(?=i)",aa)
    

    您可以阅读 python re 模块了解详细信息。 enter link description here

    【讨论】:

    • 你应该解释一下代码的作用,以防其他人偶然发现这个问题有类似的问题,但不完全相同。
    猜你喜欢
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 2016-05-30
    • 2018-11-23
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多