1

我正在尝试将字符串与正则表达式匹配,而这两种情况中只有一种有效

细绳

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 0000ABCD 123/DEFG123 - Abcdef 0000但我试图从中取出整个字符串。这是我正在使用的代码

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

4 回答 4

0

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

于 2012-07-25T19:23:28.090 回答
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})

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

于 2012-07-25T19:23:28.777 回答
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}$')
于 2012-07-25T19:25:18.060 回答
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'没有必要使用原始字符串 ( ),但我痴迷于将原始字符串用于模式,因为它们可以防止大多数反斜杠插值。

于 2012-07-25T19:25:41.507 回答