如何在python 2.6正则表达式集中包含一个字符串结尾和一个非数字字符用于搜索?
我想找到10位数字,开头是非数字,最后是非数字或字符串结尾。它是一个10位数的ISBN号,“X”对最终数字有效。
以下不起作用:
is10 = re.compile(r'\D(\d{9}[\d|X|x])[$|\D]')
is10 = re.compile(r'\D(\d{9}[\d|X|x])[\$|\D]')
is10 = re.compile(r'\D(\d{9}[\d|X|x])[\Z|\D]')
问题出现在最后一组:[\ $ | \ D]以匹配非数字或字符串结尾。
测试:
line = "abcd0123456789"
m = is10.search(line)
print m.group(1)
line = "abcd0123456789efg"
m = is10.search(line)
print m.group(1)
答案 0 :(得分:4)
您必须使用括号分组备选项,而不是括号:
r'\D(\d{9}[\dXx])($|\D)'
|
与[]
不同。它标记了两种模式之间的替代方案,而[]
匹配其中一个包含的字符。因此,|
只应在[]
内使用,如果您想匹配实际字符|
。使用括号对模式的某些部分进行分组,因此这些应用于限制由|
标记的替代范围。
如果您想避免这会创建匹配组,则可以改为使用(?: )
:
r'\D(\d{9}[\dXx])(?:$|\D)'
答案 1 :(得分:0)
\D(\d{10})(?:\Z|\D)
找到非数字后跟10位数字,以及单个非数字或字符串结尾。仅捕获数字。虽然我发现您正在搜索九位数后跟数字或X
或x
,但我在您的要求中看不到同样的内容。