Python构建正则表达式模式?

时间:2019-02-15 01:07:59

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

我正在使用此代码,但是很难找到正确的模式。我可以通过更改re.sub来实现这一点,但是我想在不使用var = "77777 11111 12891 22222 i" 的情况下进行匹配。

var
  1. 我只想从11111获得ppat = re.findall(r'(77777 (?:[\d]{1,6}))', var) 。就像我的代码一样:

    var
  2. 我想像这样从22222"i"之前获取opat = re.findall(r'((?:[\d]{1,6}) i)', var)

    output = "ndescr:  XXXX"
    
  3. 如何匹配这两种模式?例如,我要将不同的输出放到变量中,这些变量将与模式匹配?

a。第一种可能的输出是:

XXXX

b。我应该使用什么模式来匹配输出变量出现的output = "% No entries found for the selected source(s)" 和实例,我想只得到没有条目。我应该使用哪种正则表达式模式?

$attrs

谢谢

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

re.findall("(?<=77777)\\s+(?:\\d{1,6})",var)
re.findall("(?:\\d{1,6})\\s+(?=i)",aa)

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