繁体   English   中英

如何匹配 Python 中的确切单词?

[英]How to match exact words in Python?

我是 python 的新手。 我在多个文本文件中有一组字符串。 那里我将超过 100 个文件。

cool.add.odd.inn.txt

weather: cool.add.odd.inn

blab: name= hello.add.COPY_HI
blab: name= hello.add.ACCESS_HELLO
blab: name= hello.add.ADD_HI
blab: name= hello.add.WRITE_HI
blab: name= hello.add.WRITE
blab: name= hello.add.COPY

warm.add.minus.txt

weather: warm.add.minus

blab: name= hello.add.COPY_HI
blab: name= hello.add.ACCESS_HELLO
blab: name= hello.add.ADD_HI
blab: name= hello.add.WRITE_HI
blab: name= hello.add.WRITE
blab: name= hello.add.COPY

我创建了一个模式匹配列表

total = ['WRITE_HI', 'COPY_HI', 'ADD_HI'] #there will more than 100 key words

我想要给定输入列表的完全匹配并写入 csv 文件。 看我的编码

state1='weather,state'

weather= os.listdir('./data/weather')
for warm in weather:
    file= open('./data/weather' + warm, 'r')
    ins=file.read()

state1+=warm.replace('.txt', '') + ','

for all_1 in total:
    if all_1 in ins:
        state1 += all_1 + '\n'
state1 += '","'

output 以 csv 格式给出,现在我的代码通过字符串比较得到部分 output。 这里它的匹配以及类似的单词(例如:我只想要'WRITE_HI'和'COPY_HI'根据我的列表但它也给出'WRITE'和'COPY'作为类似的字符串匹配我不想要那个.我只想要列表中的模式。我听说还有更多的模式匹配方法,如回归匹配等。请任何人帮助我解决这个问题。提前致谢

Output:

weather,state 
cool.add.odd.inn,'WRITE_HI'
'WRITE'
'COPY_HI'
'COPY'
'ADD_HI' 

warm.add.minus,'WRITE_HI'
'WRITE'
'COPY_HI'
'COPY'
'ADD_HI'    

更新:找到以下结果

def word_check(ins, total):
    total=total[:]
    found=[]
    for match in re.finditer('\w+', ins):
        if words in total:
        found.append(words)
        total.remove(words)
    return found

由于匹配项始终位于行尾,因此只需在搜索查询的项目中包含换行符。

total = ['WRITE_HI\n', 'COPY_HI\n', 'ADD_HI\n']

请注意,这意味着将state1 += all_1 + '\n'更改为state1 += all_1因为所需的换行符已经存在。

此外,通过连接内容、逗号等手动组装 CSV 文件不是一个好主意。 使用像csv模块这样的库。

实际上使用正则表达式来匹配它们会更容易

import re
pattern1 = r"\w*\.WRITE\_HI"
pattern2 = r"\w*\.COPY\_HI"
pattern3 = r"\w*"\.ADD\_HI"
#then use re.search method to search and match the names

此解决方案将匹配并使用 if 和 elif 案例可以将它们分为不同的组,您可以进行处理

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM