Python正则表达式问题

Python正则表达式问题,python,regex,Python,Regex,我在将正则表达式转换为python时遇到问题。我知道'(\\d+)是单个整数的表达式,但我不知道如何得到[2-9]的整数 正则表达式如下所示: [2-9][p-z][a-h][2-9][a-z]*[p-z][2-9][p-z][2-9][p-z] 这是我当前的表达式,但它会产生许多误报,因为它不够具体: 您应该能够在Python中使用范围2-9,如下所示:re1=re.compile(r'[2-9]')。然后,在我的控制台中的一个测试显示,re1.match('7')返回您想要的MatchOb

我在将正则表达式转换为python时遇到问题。我知道
'(\\d+)
是单个整数的表达式,但我不知道如何得到[2-9]的整数

正则表达式如下所示:

[2-9][p-z][a-h][2-9][a-z]*[p-z][2-9][p-z][2-9][p-z]
这是我当前的表达式,但它会产生许多误报,因为它不够具体:


您应该能够在Python中使用范围2-9,如下所示:
re1=re.compile(r'[2-9]')
。然后,在我的控制台中的一个测试显示,
re1.match('7')
返回您想要的
MatchObject
,而
re1.match('0')
返回您想要的
None


您似乎在
re2
中使用了范围
[a-z]
,您说您希望
[p-z]
-在其他字符范围中也存在类似问题。

您应该能够在Python中使用范围2-9,如下所示:
re1=re.compile(r'[2-9]')
。然后,在我的控制台中的一个测试显示,
re1.match('7')
返回您想要的
MatchObject
,而
re1.match('0')
返回您想要的
None


您似乎还在
re2
中使用了
[a-z]
范围,您说您希望
[p-z]
-在其他字符范围中使用类似的问题。

根据我在您的问题中看到的情况,我建议使用此代码:

import re

pat = ('([2-9])'        # Integer Number 1
       '([p-z])'        # Any Single Word Character (Not Whitespace) 1
       '([a-h])'        # Any Single Word Character (Not Whitespace) 2
       '([2-9])'        # Integer Number 2
       '([a-z]*[p-z]+)' # Word 1
       '([2-9])'        # Integer Number 3
       '([p-z])'        # Any Single Word Character (Not Whitespace) 3
       '(.)'            # Any Single Character 1
       '([p-z])'        # Any Single Word Character (Not Whitespace) 4
       )
rg = re.compile(pat)

txt = 'jiji4pa6fmlgkfmoaz8p#q,,,,,,,,,,'
m = rg.search(txt)
if m:
    text2 = "%s%s%s%s%s%s%s%s%s" % m.groups()
    print text2

# prints 4pa6fmlgkfmoaz8p#q
编辑
根据我在你的问题中看到的情况,我提出了这一准则:

import re

pat = ('([2-9])'        # Integer Number 1
       '([p-z])'        # Any Single Word Character (Not Whitespace) 1
       '([a-h])'        # Any Single Word Character (Not Whitespace) 2
       '([2-9])'        # Integer Number 2
       '([a-z]*[p-z]+)' # Word 1
       '([2-9])'        # Integer Number 3
       '([p-z])'        # Any Single Word Character (Not Whitespace) 3
       '(.)'            # Any Single Character 1
       '([p-z])'        # Any Single Word Character (Not Whitespace) 4
       )
rg = re.compile(pat)

txt = 'jiji4pa6fmlgkfmoaz8p#q,,,,,,,,,,'
m = rg.search(txt)
if m:
    text2 = "%s%s%s%s%s%s%s%s%s" % m.groups()
    print text2

# prints 4pa6fmlgkfmoaz8p#q
编辑
但是
[2-9]
匹配2-9的整数是正确的。那么你首先想要匹配什么呢?你得到的假阳性是什么?您要匹配的字符串示例有哪些?这个问题非常不清楚。第一个表达式和下面的代码不匹配。您希望使用
r'
原始字符串来避免所有的双
\`,并且有一个
re.VERBOSE`模式,使编写可读表达式比串联9个单独的字符串更容易。.可能值得一读这篇文章
\d+
不是一位的模式,而是“一个或一系列数字”,但
[2-9]
匹配2-9的整数是正确的。那么您首先要匹配什么?您得到的误报是什么?您要匹配的字符串示例是什么?这个问题非常不清楚。第一个表达式和下面的代码不匹配。您要使用
r''
原始字符串来避免所有的重复
\`,并且有一种
re.VERBOSE`模式,使编写可读表达式比串联9个单独的字符串更容易。。可能值得一读这篇文章。
\d+
不是一个数字的模式,而是“一个或一个连续的数字”“谢谢,我知道我使用的表达式比我想要的要宽松得多,我不确定使用[2-9]是否是python的正确语法。谢谢,我知道我使用的表达式比我想要的宽松得多,我不确定是否使用[2-9]是python的正确语法。根据其他注释,\d仍然匹配每个整数。使用([2-9])不是更具体吗?哦,我真的很抱歉。我是从re1、re2等系列中复制的,但你是对的:如果你不想要数字0和1,你必须使用
[2-9]
而不是
\d
。我纠正了我的错误code@Mondrianaire非常感谢。我不知道今天我的大脑在哪里;我编辑了我的答案,以提供一种更简单的方法来获取此问题的结果。根据其他注释,\d仍然匹配每个整数。使用([2-9])不是更具体吗?哦,我真的很抱歉。我是从re1、re2等系列中复制的,但你是对的:如果你不想要数字0和1,你必须使用
[2-9]
而不是
\d
。我纠正了我的错误code@Mondrianaire非常感谢。我不知道今天我的大脑在哪里;我编辑了我的答案,以提供一种更简单的方法来获得这个问题的结果。
import re

pat = ('([2-9])'        # Integer Number 1
       '([p-z])'        # Any Single Word Character (Not Whitespace) 1
       '([a-h])'        # Any Single Word Character (Not Whitespace) 2
       '([2-9])'        # Integer Number 2
       '([a-z]*[p-z]+)' # Word 1
       '([2-9])'        # Integer Number 3
       '([p-z])'        # Any Single Word Character (Not Whitespace) 3
       '(.)'            # Any Single Character 1
       '([p-z])'        # Any Single Word Character (Not Whitespace) 4
       )
rg = re.compile(pat)

txt = 'jiji4pa6fmlgkfmoaz8p#q,,,,,,,,,,'
m = rg.search(txt)
if m:
    text2 = "%s%s%s%s%s%s%s%s%s" % m.groups()
    print text2

# prints 4pa6fmlgkfmoaz8p#q
text2 = ''.join(m.groups())  # is better