Python构建Regex模式?

2024-04-27 01:00:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在处理这个代码,我很难找到正确的模式。我可以通过改变doing re.sub来实现这一点,但是如果可能的话,我希望不使用re.sub来进行匹配。你知道吗

var = "77777 11111 12891 22222 i"
  1. var我只想得到11111。就像我的代码:

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

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

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

output = "ndescr:  XXXX"

b.我应该使用什么模式来匹配XXXX和输出变量如下所示的实例,我只想得到无条目。我应该使用什么正则表达式模式?你知道吗

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

谢谢


Tags: 实例no代码reoutputvar模式条目
2条回答

虽然还不完全清楚你想匹配什么,但我正在尝试。你知道吗

如果您只是尝试获取第二个也是最后一个元素,那么这可以不用正则表达式来完成。你知道吗

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()
re.findall("(?<=77777)\\s+(?:\\d{1,6})",var)
re.findall("(?:\\d{1,6})\\s+(?=i)",aa)

有关详细信息,请阅读python re模块。 enter link description here

相关问题 更多 >