2012-02-23 83 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) 
'\\.\\..' 
>>>