2009-05-02 19 views
3

と私は*は、通常のスターまたはUnicode文字の\ u00d7またはちょうどXのいずれかになりますpython正規表現です。 Unicodeの文字

"2 * 240pin" 

like-何かを解析するREGのEXPを必要としています。これは私が持っているものであるが、そのは動作していない:

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 

答えて

2

。しかし、あなたは文字クラスを使うこともできます。だから、これを試してみてください。

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

おかげで:-)それを逃れるために悪影響を及ぼすことはありません! –

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

あなたは '' *内部文字クラスをエスケープする必要はありません。 – Gumbo

+0

ああ、そうです、私は忘れてしまった - しかし、それは説明するための – Francis

2

使用character sets ([]):文字のセットを示すために使用

[]

。文字は個別にリストすることもできますし、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') 
>>>