Python正则表达式与Unicode字符

3
我需要一个正则表达式,可以解析类似于-的内容。
"2 * 240pin"

星号 * 可以是普通星号或Unicode字符 \u00d7 或字母 x。以下是我的代码,但它不起作用:

multiple= r'^(\d+)\s?x|*|\\u00d7\s?(\d+)(\w{2,4})$'
multiplepat= re.compile(multiple, re.I)
print multiplepat.search(u'1 X 240pin').groups()

返回值

multiplepat= re.compile(multiple, re.I)
File "C:\Python26\lib\re.py", line 188, in compile
return _compile(pattern, flags)
File "C:\Python26\lib\re.py", line 243, in _compile
raise error, v # invalid expression
error: nothing to repeat
3个回答

2
multiple= r'^(\d+)\s[xX\*\\u00d7]\s?(\d+)(\w{2,4})$'

在字符类中,您不需要转义 * - Gumbo
哦,没错,我忘了 - 但转义它也没有坏处 :-) - Francis

2

由于在您使用它时,*是一个量词符号,因此您需要对其进行转义。但是您也可以使用字符类。因此,请尝试以下方法:

ur'^(\d+)\s?[x*\u00d7]\s?(\d+)(\w{2,4})$'

2

使用字符集([]

[]

用于表示一组字符。字符可以逐个列出,也可以通过给出两个字符并用“-”分隔它们来指示字符范围。 在字符集内不激活特殊字符

>>> m= u'^(\\d+)\\s?[x*\u00d7]\\s?(\\d+)(\\w{2,4})$'
>>> mpat=re.compile(m)
>>> mpat.search(u'1 * 240pin').groups()
(u'1', u'240', u'pin')
>>>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接