Python 如何编写正则表达式来匹配转义为引号字符加倍的字符串文字?
我正在编写一个需要识别FORTRAN字符串文字的解析器。它们用单引号引起来,转义字符用双引号引起来。i、 ePython 如何编写正则表达式来匹配转义为引号字符加倍的字符串文字?,python,regex,fortran,ply,Python,Regex,Fortran,Ply,我正在编写一个需要识别FORTRAN字符串文字的解析器。它们用单引号引起来,转义字符用双引号引起来。i、 e “我不明白你的意思” 是有效的转义FORTRAN字符串 Ply接受正则表达式中的输入。到目前为止,我的尝试没有成功,我不明白为什么 t_STRING_LITERAL=r“[^(“”)]*” 有什么想法吗?字符串文字是: 开放式单引号,后跟: 任意数量的双单引号和非单引号,然后 一段简短的引用 因此,我们的正则表达式是: r"'(''|[^'])*'" 你想要这样的东西: r"'([^'
“我不明白你的意思”
是有效的转义FORTRAN字符串
Ply接受正则表达式中的输入。到目前为止,我的尝试没有成功,我不明白为什么
t_STRING_LITERAL=r“[^(“”)]*”
有什么想法吗?字符串文字是:
r"'(''|[^'])*'"
你想要这样的东西:
r"'([^']|'')*'"
也就是说,在单引号内可以有双引号或非引号字符
括号定义了一个字符类,您可以在其中列出可能匹配或不匹配的字符。它不允许有比这更复杂的事情发生,因此尝试使用括号并匹配多字符序列
(“”)
是行不通的。相反,您的[^(“”)]
字符类相当于[^'()]
,也就是说,它匹配的不是单个引号或左括号或右括号的任何内容。通常很容易获得一些快速而肮脏的内容,用于解析给您带来问题的特定字符串文本,但对于通用解决方案,您可以从以下位置获得一个非常强大且完整的字符串文本正则表达式:
我不确定FORTRAN的字符串文字和Python的字符串文字之间有什么显著的区别,但如果没有其他东西的话,这是一个方便的参考。这似乎不能处理转义序列。这似乎不能处理f字符串。
import re
ch ="'I don''t understand what you mean' and you' ?"
print re.search("'.*?'",ch).group()
print re.search("'.*?(?<!')'(?!')",ch).group()
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'