下面是可能包含反斜杠转义引号和双引号字符串字面匹配成熟的正则表达式(从Mastering Regular Expressions):
r'"[^"\\]*(?:\\.[^"\\]*)*"'
在分界报价,它消耗任何对字符以反斜杠开始而不费心去识别第二个字符;这使得它可以处理逃脱的反斜杠和其他转义序列,而无需额外的麻烦。它的效率也可以在缺少possessive quantifiers和atomic groups的情况下得到提高,这是Python不支持的。
您的应用程序的完整的正则表达式是:
r'^((?:[^!"]+|"[^"\\]*(?:\\.[^"\\]*)*")*)!.*$'
这符合只包含注释行,并捕获组#1中的注释前面的一切。对于开始和!
的行,捕获可以是零长度。这正则表达式是为使用与sub
而非search
,如下所示:
import re
pattern = r'^((?:[^!"]+|"[^"\\]*(?:\\.[^"\\]*)*")*)!.*$'
x = '''print "hi!" ! Remove me'''
y = re.sub(pattern, r'\1', x)
print(y)
See it in action on ideone.com
免责声明:这个答案是不是FORTRAN,只有代码后面的问题中指定的规则。我从来没有与FORTRAN合作过,我在过去一小时左右发现的所有参考文献似乎都描述了一种完全不同的语言。咩!
逃脱反斜杠怎么样? – 2011-03-01 05:47:40
这将处理转义反斜杠:'pattern = r'''(?:[^!“] |((?<!\\)”|(\\\\)+“)。*?((?< !\\)“|(\\\\)+”))+''''但是FORTRAN允许使用单引号(')和双引号(“),这根本不处理。总体而言,使用正则表达式来做这个可能不是最好的解决方案。 – amicitas 2011-03-01 06:11:27