2012-02-23 119 views
0

我正则表达式这里有一个例子:为应对特殊符号

>>> txt1 
'fdf\\.\\..dgg' 

我打算找一个正则表达式,将返回我的特殊符号。

所以我试了这个。

>>> ans=re.search("\w+[\|.]*\w+",txt1) 
>>> ans.group() 
'fdf' 

\ w +会发现单词继续。 [\ |。]应该找到\或。 (点)。明星应该继续下一个入场。 同样,\ w +应该找到尾随的单词。

请指导这里出了什么问题? 或者这个概念并不完全是我认为的...... 在此先感谢所有...... 正如你所看到的,这个想法不起作用。

回答

1

你不能在一个字符类中使用的交替操作|。在[ ]里面,一根管子正好代表那个角色。您的反斜杠将其转义(不必要),因此您正在寻找管道或点。你想要的是

ans=re.search(r"\w+[\\.]*\w+", txt1) 
+0

email =“bogusemail123 @ sillymail.com“ >>> x = re.search('\ w + [。| \ w] @(\ w + [。])*(com $ | in $)',email) >>> x .group() '[email protected]' 这是一个与或..... – 2012-02-23 12:00:01

+1

这是因为你没有在字符类中的反斜杠。 '[。| \ w]'当您的意思仅仅是'[。\ w]'时,将匹配点,管道或单词字符。在原来的文章中,你有'[\ |。]',反斜杠用来转义管道,所以它与'[|。]'相同。 – Borodin 2012-02-23 12:21:23

+0

噢.......我完全没有得到那个.......你是对的......谢谢你给我的注意带来了严重的错误....非常感谢你...... – 2012-02-23 12:38:34

1

“我打算找到一个正则表达式,它会返回给我特殊符号。”

re.search(r"\w+([\\\.]*)\w+", txt1) 

ans.group(1)找到你需要的东西:

ans = re.search(r"\w+([\\\.]*)\w+", txt1) 
ans.group(1) 

# '\\.\\..' 

[]设计一组字符(不|“或”),但你必须转义反斜线,用反斜杠\. -> \\\.点以匹配它。

+0

我的印象是,在广场[]中提到的符号并不需要用反弹来转义下...感谢您的修正 – 2012-02-23 12:04:27

+1

不是错误因此,字符类中的点不需要转义。 – Borodin 2012-02-23 12:13:46

+0

只有一个反斜杠需要转义,并且只是因为'[\。]'会被视为不必要的转义点。脱字符^只有在它是字符类的第一个字符时才需要转义,否则将被视为否定整个类。 – Borodin 2012-02-23 12:15:55

1

如果你想在那里找到任何不是字母(包括空格),然后使用:

[^\w]+ 
+0

这是一个很酷的伎俩.....竖起大拇指 – 2012-02-23 12:52:12

0

既然你想找到特殊符号,re.findall(r"[a-z]*([.\\] ?)[a-z]*", txt1)将返回你的符号作为列表。您可以随时join()他们需要(如下图所示的例子):

>>> 
>>> txt1 
'fdf\\.\\..dgg' 
>>> ans = re.findall(r"[a-z]*([.\\] ?)[a-z]*", txt1) 
>>> ans 
['\\', '.', '\\', '.', '.'] 
>>> 
>>> "".join(ans) 
'\\.\\..' 
>>>