【发布时间】:2021-02-14 13:55:55
【问题描述】:
最近,我一直在 Python 3.7.6 中创建一个编辑器(使用 tkinter),我创建了以下语法来突出显示单引号、双引号和三引号,但我想排除 f- 大括号内的所有字符字符串,我尝试使用[^\{(.*)\}] 作为否定集,但后来意识到它不起作用。我尝试在互联网上搜索,但所有这些都不适合我的正则表达式。
这是代码的正则表达式部分:
def regex_groups(self, name, alternates):
return "(?P<%s>" % name + "|".join(alternates) + ")"
stringprefix = r"(\bB|b|br|Br|bR|BR|rb|rB|Rb|RB|r|u|R|U|f|F|fr|Fr|fR|FR|rf|rF|Rf|RF)?"
sqstring = stringprefix + r"'[^'\\\n]*(\\.[^'\\\n]*)*'?"
dqstring = stringprefix + r'"[^"\\\n]*(\\.[^"\\\n]*)*"?'
sqqqstring = stringprefix + r"'''[^'\\]*((\\.|'(?!''))[^'\\]*)*(''')?"
dqqqstring = stringprefix + r'"""[^"\\]*((\\.|"(?!""))[^"\\]*)*(""")?'
string = self.regex_groups("STRING", [sqqqstring, dqqqstring, sqstring, dqstring])
我尝试将stringprefix 分解为两个字符串r"(f|F|fr|Fr|fR|FR|rf|rF|Rf|RF)?" 和r"(B|b|br|Br|bR|BR|rb|rB|Rb|RB|r|u|R|U)?",然后将它们分别与sqstring, dqstring, sq3string and dq3string 一起使用,但没有成功。
请帮帮我!
任何帮助表示赞赏! :)
【问题讨论】:
-
你对第三个带花括号的字符串有什么期望?
-
开/关字符对不规则。您无法使用正则表达式准确匹配它们。
-
我的期望是它应该突出显示
f'This is an {,把它们放在中间(在这种情况下是f_string然后是}' -
@MisterMiyagi 当我尝试使用正则表达式从任何不带引号的大括号中排除文本时,它可以工作,但带引号则不能
-
您希望
f"This is an {{plain string}}"和f"This is a set: { {1, 2, 3}}"得到什么结果?