在python中用re.sub替换单个单词
剧透:是的,这是一项任务。这个问题已经解决了,但出于个人利益,我想知道以下内容 因此,目前我们正在为赋值使用语法标记,我们在其中输入一个文件,并使用正则表达式字典,相应地给它们(关键字)上色 但也有一些问题在python中用re.sub替换单个单词,python,regex,Python,Regex,剧透:是的,这是一项任务。这个问题已经解决了,但出于个人利益,我想知道以下内容 因此,目前我们正在为赋值使用语法标记,我们在其中输入一个文件,并使用正则表达式字典,相应地给它们(关键字)上色 但也有一些问题 for i in iterations: pass 在上面这一行中,使用正则表达式 r'(\t*for.*in.*?:.?)”可以工作,但它会给整行着色。虽然这是允许的,但我真的希望它只标记for/in 尝试使用r'(\bfor\b |\bin\b)也不是善意的,也不是r'(for
for i in iterations:
pass
在上面这一行中,使用正则表达式
r'(\t*for.*in.*?:.?)”
可以工作,但它会给整行着色。虽然这是允许的,但我真的希望它只标记for/in
尝试使用r'(\bfor\b |\bin\b)
也不是善意的,也不是r'(for)
,或r'(\sfor\s)
我将整个代码读入一个字符串,并使用re.sub()将所有出现的内容替换为
color+r'\1'+color\u end
,其中color指定颜色序列。您可以使用捕获和反向引用:
^(\t*)(for\b)(.*)\b(in)\b(.*?:)
替换为$1$2$3$4$5
。看
这里,表达式被分成5个子部分,包含(…)
捕获组。在替换模式中,使用具有$
+n
格式的反向引用引用捕获的那些值,其中n
是模式内捕获组的ID
如果您没有机会对多个捕获组运行1个正则表达式,请运行两个:
-->$1 for(请参阅)^(\t*)for\b(?=.*\bin\b.*:)
-->^(\t*for\b.*)bin\b(?=.*:)
(请参阅)$1in
import re
STR = """
for i in iterations:
pass
"""
pattern = r'(\b)(for|in|pass)(\b)'
change = r'\1<COLOR>\2</COLOR>\3'
print re.sub(pattern, change, STR)
重新导入
STR=”“”
对于迭代中的i:
通过
"""
模式=r'(\b)(用于“通过”中的(\b)'
更改=r'\1\2\3'
打印回复(图案、更改、STR)
因此,我用空格捕获关键字,并用as\1和\3返回它们
这使得:
<COLOR>for</COLOR> i <COLOR>in</COLOR> iterations:
<COLOR>pass</COLOR>
迭代中i的:
通过
使用r'^(\t*)(for)(.*)(in)(.*?:。?)”
并替换为$1$2$3$4$5
应提及上述内容(将进行编辑),但所有正则表达式都来自文件字典(每行的格式均为“regex”):键入例如“(\t*for.*in.*:。?)”:对于
,并且该程序仅使用一个捕获组。因此,应该可以运行两次re.sub()
,并将所有首先标记为
,然后将所有标记为
?是的,这是可能的。