简单的Python正则表达式匹配

时间:2012-07-25 19:12:54

标签: python regex

我正在尝试将字符串与正则表达式匹配,并且只有两个案例中的一个正在工作

字符串

ABCD 123 - Abcdef 0000
ABCD 123/DEFG123 - Abcdef 0000

正则表达式

[A-Z]+ [A-Z0-9]{2,20} - [A-Z][a-z]+ [0-9]{4}

这匹配第一个,我试图将它与两者匹配,这是我尝试的新表达

[A-Z]+ [A-Z0-9\\/]{2,20} - [A-Z][a-z]+ [0-9]{4}

这与整个DEFG123 - Abcdef 0000中的ABCD 123/DEFG123 - Abcdef 0000匹配,但我试图从中获取整个字符串。这是我正在使用的代码

regex = re.compile(expression)
r = regex.search(string)

4 个答案:

答案 0 :(得分:0)

我很确定你不需要逃避正斜杠。删除双\,您应该设置。使用regexpal.com来测试这种事情。

答案 1 :(得分:0)

删除额外的反斜杠:

[A-Z]+ [A-Z0-9\/]{2,20} - [A-Z][a-z]+ [0-9]{4}

或者您可以使用分组:

([A-Z]+ [A-Z0-9]{2,20} - [A-Z][a-z]+ [0-9]{4})|([A-Z]+ [A-Z0-9\\/]{2,20} - [A-Z][a-z]+ [0-9]{4})

这结合了上面的两个RegExes并匹配两行。

答案 2 :(得分:0)

我试过这段代码:

import re
def foo(s):
    r = re.compile('[A-Z]+ [A-Z0-9\\/]{2,20} - [A-Z][a-z]+ [0-9]{4}')
    m = r.search(s)
    return s[m.start():m.end()]
print foo('ABCD 123 - Abcdef 0000')
print foo('ABCD 123/DEFG123 - Abcdef 0000')

并得到以下结果:

ABCD 123 - Abcdef 0000
ABCD 123/DEFG123 - Abcdef 0000

尝试使用^(行首)和$(行尾)字符:

r = re.compile('^[A-Z]+ [A-Z0-9\\/]{2,20} - [A-Z][a-z]+ [0-9]{4}$')

答案 3 :(得分:0)

逃避是错的。拿出来:

string_one = 'ABCD 123 - Abcdef 0000'
string_two = 'ABCD 123/DEFG123 - Abcdef 0000'
pattern = r'[A-Z]+ [A-Z0-9/]{2,20} - [A-Z][a-z]+ [0-9]{4}'
regex = re.compile(pattern)
if regex.search(string_one):
    print "string one matches!"
if regex.search(string_two):
    print "string two matches!"

# output:
string one matches!
string two matches!

请注意,我对原始字符串(r'this is a raw string')的使用是不必要的,但我痴迷地使用原始字符串作为模式,因为它们可以防止大多数反斜杠插值。