gpt4 book ai didi

python - 如何使用 Python 从一行文本中过滤掉表达式?

转载 作者:行者123 更新时间:2023-11-28 21:04:31 24 4
gpt4 key购买 nike

我想删除不属于预定义列表的单词。例如,如果我的列表是:

ANIMAL
BIRD
CARNIVORE
HERBIVORE
MAMMAL
OMNIVORE

我的输入是这样的:

(ANIMAL (CARNIVORE (BIRD Peacock)) (HERBIVORE (MAMMAL Goat)))

我希望我的输出是:

(ANIMAL (CARNIVORE (BIRD )) (HERBIVORE (MAMMAL )))

我试过这个:

current_split = re.split("\W", test)
for thing in current_split:
if thing in parse_symbols:
print thing

但这会删除括号,我明白了:

ANIMAL
CARNIVORE
BIRD
HERBIVORE
MAMMAL

此外,由于 for 循环,换行符被引入,这是我不想要的。

我做错了什么?

最佳答案

这是万无一失的解决方案:将 re.sub 与函数一起使用。首先获取允许的单词的:

allowed = set("""
ANIMAL
BIRD
CARNIVORE
HERBIVORE
MAMMAL
OMNIVORE
""".split())

或使用

allowed = {'ANIMAL', 'BIRD', #... and so forth

然后 re.sub 每个单词都有一个正则表达式 \w+,然后检查它们是否在 ok 中 - 如果是,然后返回那个词,否则返回一个空字符串:

def replacement(match):
word = match.group(0)
if word in allowed:
return word
return ''

result = re.sub(r'[\w-]+', replacement, user_input)
print(result)

打印

(ANIMAL (CARNIVORE (BIRD )) (HERBIVORE (MAMMAL )))

与此处提供的各种 .replace 解决方案不同,这将只考虑整个单词和整个单词。如果整个单词都在允许的单词集中,它只会保留一个单词。它永远不会删除完整单词的一部分。它适用于任何分隔符和运算符。

如果你想删除右括号前的任何多余空间,请使用另一个替换:

re.sub(r'\s+\)', '', result)

上面的结果会产生什么

(ANIMAL (CARNIVORE (BIRD) (HERBIVORE (MAMMAL))

关于python - 如何使用 Python 从一行文本中过滤掉表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45158422/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com