2010-01-26 32 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' 
相关问题