【问题标题】:How to match exact words in Python?如何在 Python 中匹配精确的单词?
【发布时间】:2020-04-27 08:45:51
【问题描述】:

我是 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 += '","'

输出以 csv 格式提供,现在使用我的代码,我通过字符串比较获得部分输出。这里它的匹配和相似的词(例如:我只想要'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

【问题讨论】:

    标签: python regex python-3.x list python-2.7


    【解决方案1】:

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

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

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

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

    【讨论】:

    • @DarshanMahalingeGowda - 在您要查找的术语中添加换行符与您将 CSV 文件放在一起的方式无关。前者解决了你所面临的具体问题,而后者解决了由于重新发明了一个特别复杂的轮子而你以后肯定会面临的更多问题。
    • @TigerhawkT3- 我检查了你的方法,但对我不起作用。
    【解决方案2】:

    其实用正则表达式匹配会更方便

    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 案例可以将它们分为不同的组,您可以进行处理

    【讨论】:

    • @Surya 对不起,我没有正确理解您,您能否详细说明解决方案,据我了解,您希望我将此表格包含在阅读形式中,即 ins 对吗?还是我应该包括在总列表中?
    • @DarshanMahalingeGowda 是的,如果您不想更改任何内容,则必须在 read 方法中获取输入,并创建一些列表,然后使用 re.search 添加上述模式并将它们分类为不同的列表,常用名称或根据您的情况,希望这会有所帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 2021-01-31
    • 2019-08-09
    • 2023-04-09
    相关资源
    最近更新 更多