如何比较正则表达式对象,就好像我在 python 中使用 flex 一样?



我有以下代码,我要做的是,当它收到来自text_to_search的输入时,它会找到它是否是指令,它是任何不是指令(ID(的单词或它是一个运算符,到目前为止,如果它找到一条指令,它会打印我,但在 ID 部分它也打印我 Set, 而不是例如Jaja,那么我该如何实现这一目标?

text_to_search="Set Sets UnionShowSets jaja:={hi};"
import re
t=re.search(r'Sets?|ShowSet|ShowSets|Union|Intersect|SetUnion|SetIntersect',text_to_search)
s=re.search(r':=|{|}|;',text_to_search)
d=t=re.search(r'[a-zA-Z0-9]+',text_to_search)
if t:
print("Instruction: ")
print(t)
else:
print("ID: ")
print(d)
if s:
print("Operator: ")
print(s)

打印结果:

Instruction: 
<_sre.SRE_Match object; span=(0, 3), match='Set'>
Operator: 
<_sre.SRE_Match object; span=(27, 29), match=':='>

所需的打印结果:

Instruction: 
<_sre.SRE_Match object; span=(0, 3), match='Set'>
Instruction: 
<_sre.SRE_Match object; span=(0, 3), match='Sets'>
Instruction: 
<_sre.SRE_Match object; span=(0, 3), match='Union'>
Instruction: 
<_sre.SRE_Match object; span=(0, 3), match='ShowSets'>
ID: 
<_sre.SRE_Match object; span=(0, 3), match='jaja'>
ID: 
<_sre.SRE_Match object; span=(0, 3), match='hi'>
Operator: 
<_sre.SRE_Match object; span=(0, 3), match='{'>
Operator: 
<_sre.SRE_Match object; span=(0, 3), match='}'>
Operator: 
<_sre.SRE_Match object; span=(27, 29), match=':='>
Operator: 
<_sre.SRE_Match object; span=(27, 29), match=';'>

我只是通过在列表中保存我不想再次打印的元素来修复它:

text_to_search="Set Sets UnionShowSets jaja:={hola};"
import re
x=[]
for match in re.finditer('Sets?|ShowSet|ShowSets|Union|Intersect|SetUnion|SetIntersect',text_to_search):
print("Instruccion: ")
print(match)
x.append(match)
for match in re.finditer(r':=|{|}|;',text_to_search):
print("Operador: ")
print(match)
for match in re.finditer(r'[a-zA-Z0-9]+',text_to_search):
if match in x:
continue
else:
print("ID: ")
print(match)

最新更新