如何在 Tkinter 文本搜索方法中使用正则表达式?
Posted
技术标签:
【中文标题】如何在 Tkinter 文本搜索方法中使用正则表达式?【英文标题】:How to use a regular expression in Tkinter text search method? 【发布时间】:2014-01-23 04:11:08 【问题描述】:我想在方括号内找到一个突出显示的区域。这些方括号可以包含任何文本:[A hello world] [B this is a tree] [A tkinter documentation is bad]
我想突出显示括号中带有“A”字符的单词,如下所示:
为了获取起始索引和匹配字符的数量,我尝试了这个:
countVar = StringVar()
reg_area = re.compile(r'\[A.*\]')
index = text.search('1.0', reg_area, stopindex=END, count=countVar, regexp = True)
这不起作用,我收到了。
TclError: bad text index "<_sre.SRE_Pattern object at 0x3856d78>"
如何找到所有出现并正确突出显示它们?
【问题讨论】:
【参考方案1】:你有两个问题。首先,您以错误的顺序放置位置参数。第一个位置参数应该是模式,第二个位置参数被视为开始索引。由于您的第二个参数是SRE_Pattern
的实例,因此您会收到错误的文本索引错误。
您需要更改参数的顺序,以便您的第一个参数是模式。接下来的两个参数应该是开始和结束索引。
其次,当您将regexp
设置为True
时,您仍然必须将模式作为字符串传入。文本小部件将该字符串解释为正则表达式。您不能传入已编译的正则表达式。
这是一个应该可以工作的例子:
index = text.search(r'\[A.*\]', "1.0", END, count=countVar, regexp=True)
FWIW,this answer 对问题 Tkinter text highlighting in python 给出了一个子类化 Text 类以添加名为 highlight_pattern
的方法的示例。
【讨论】:
以上是关于如何在 Tkinter 文本搜索方法中使用正则表达式?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用正则表达式搜索 Git 提交消息并将这些消息及其行号输出到文本文件
如何使用 Python 结合正则表达式和字符串/文件操作在文本文件中搜索模式并存储模式的实例?
如何使用正则表达式匹配从 xml 文件中搜索和替换包含占位符标记的文本。 VB.net 或 C#