regex 空间NOT_IN属性

whhtz7ly  于 2023-04-07  发布在  其他
关注(0)|答案(2)|浏览(90)

我有条短信

ADDRESS_ID NAME ADDRESS CATEGORY_ID FIRST_NAME DAILY_ACTIVE

我想找出代币

NAME ADDRESS FIRST_NAME

我想忽略所有带有“ID”,“ACTIVE”等的令牌。
所以我用了spacy-
rstrip()从一个文件中阅读所有允许的令牌。例如- Name,Address

newPattern = [{"LOWER": line.rstrip()}]
 newPattern2 = [{"LOWER": {"NOT_IN":["ID"], "REGEX": "[_]{}".format(line.rstrip())}}]
 newPattern3 = [{"LOWER": {"REGEX": "{}[_]".format(line.rstrip()), "NOT_IN":["ID"]}}]

它是这样发出的

ADDRESS_ID
NAME
ADDRESS
FIRST_NAME

但是我无法忽略带有ID的令牌。我如何才能实现这一点?

f3temu5u

f3temu5u1#

我不知道spacy,但我认为你可以尝试在你的正则表达式中使用word boundary。希望下面的片段可以给予你在spacy中实现它的想法。

import re

txt  = "ADDRESS_ID NAME ADDRESS CATEGORY_ID FIRST_NAME DAILY_ACTIVE"
line = " NAME ADDRESS FIRST_NAME "
line = r"\b" + line.strip().replace(" ", r"\b|") + r"\b"
matches = re.findall(line, txt, re.IGNORECASE)
print("- search text: " + line)
print("- search pattern: " + line)
print('- matched result:', *matches, sep='\n  + ')

参见演示here

x3naxklr

x3naxklr2#

如果您的实际模式类似于"ID"
LOWER将再次匹配输入标记的小写形式,因此您还需要在模式字符串中使用小写,例如{"LOWER": {"NOT_IN": ["id"]}}
{"LOWER": {"NOT_IN": ["ID"]}}将匹配每个标记,因为没有小写标记是"ID"

相关问题