2010-01-26 74 views

回答

20

一個文本字符串是:

  1. 開放單引號,依次爲:
  2. 任何數量加倍單引號和非單引號,然後
  3. 密切單引號。

因此,我們的正則表達式是:

r"'(''|[^'])*'" 
+1

阿正則表達式的禪,謝謝! – Brendan 2010-01-26 22:47:48

+1

這似乎不處理轉義序列。 – Cyoce 2016-04-07 19:16:18

4

你想是這樣的:

r"'([^']|'')*'" 

這是說單引號內,你可以有雙引號或非報價字符。

括號定義了一個字符類,您可以在其中列出可能匹配或不匹配的字符。它不允許任何比這更復雜的事情,所以嘗試使用括號並匹配多字符序列('')不起作用。相反,你的[^('')]字符類相當於[^'()],即它匹配任何東西,這不是一個單引號或左或右括號。

0

它通常是很容易得到的東西快速和骯髒的解析這是給你的問題,特別是字符串常量,但是對於一般的解決方案,您可以從pyparsing module字符串字面量一個非常強大和完整的正則表達式:

>>> import pyparsing 
>>> pyparsing.quotedString.reString 
'(?:"(?:[^"\\n\\r\\\\]|(?:"")|(?:\\\\x[0-9a-fA-F]+)|(?:\\\\.))*")|(?:\'(?:[^\'\\n\\r\\\\]|(?:\'\')|(?:\\\\x[0-9a-fA-F]+)|(?:\\\\.))*\')' 

我不確定FORTRAN的字符串文字和Python的顯着區別,但是如果沒有別的,它是一個方便的參考。

0
import re 

ch ="'I don''t understand what you mean' and you' ?" 

print re.search("'.*?'",ch).group() 
print re.search("'.*?(?<!')'(?!')",ch).group() 

結果

'I don' 
'I don''t understand what you mean' 
相關問題