Python:查找以文本结尾的所有单词(re.findall)

Python:查找以文本结尾的所有单词(re.findall),python,regex,Python,Regex,将macOS.txt加载到变量文本中。然后执行以下操作: 查找文本中出现的所有macOS、Mac OS和OS X。将结果放在一个列表中。 打印这些单词的列表,然后打印以下内容: 文本中有{length of list}提到macOS、macOS或OSX的单词 我想我应该使用正则表达式,比如re.findall或re.finditer任何人都可以更正我下面的代码? text = open("macOS.txt", "r") import re patte

将macOS.txt加载到变量文本中。然后执行以下操作: 查找文本中出现的所有macOS、Mac OS和OS X。将结果放在一个列表中。 打印这些单词的列表,然后打印以下内容: 文本中有{length of list}提到macOS、macOS或OSX的单词

我想我应该使用正则表达式,比如re.findall或re.finditer任何人都可以更正我下面的代码?

text = open("macOS.txt", "r")  
import re
pattern = '[A-Za-z0-9-]+' 
lines = "OS"  
ls = re.findall(pattern,lines)
print(ls)
但是如何在文本中找到所有出现的macOS、macOS和OSX

还是这个

import re
with open('macOS.txt', 'r') as f:
  content = f.read()
temp = re.findall(\b(?!\w*OS\b)\w*OS\b)
print(f'There are {len(temp)} words ended with OS (other than OS and macOS) in the text.')

您可以使用fuzzyfuzzy库。 在找到“OS”前后写几个字母,使用FuzzyFuzzy库进行比较。

或者,如果您的输出仅限于“OS”前后的一个单词,那么您可以这样做-

  • 如果该词包含操作系统(macOS)
  • 在OS=>之前找到一个单词,看看它的“Mac”=>是否包含它们
  • 在OS=>之后找到一个单词,看看它的“X”是否与它们对应

  • 您可以使用fuzzyfuzzy库。 在找到“OS”前后写几个字母,使用FuzzyFuzzy库进行比较。

    或者,如果您的输出仅限于“OS”前后的一个单词,那么您可以这样做-

  • 如果该词包含操作系统(macOS)
  • 在OS=>之前找到一个单词,看看它的“Mac”=>是否包含它们
  • 在OS=>之后找到一个单词,看看它的“X”是否与它们对应
  • 使用

    re.findall(r'\b(?:(?:Mac | Mac)OS | OS X)\b',s)
    

    解释

    --------------------------------------------------------------------------------
    \b单词char(\w)和
    不是单词char的东西
    --------------------------------------------------------------------------------
    (?:组,但不捕获:
    --------------------------------------------------------------------------------
    (?:组,但不捕获:
    --------------------------------------------------------------------------------
    Mac'Mac'
    --------------------------------------------------------------------------------
    |或
    --------------------------------------------------------------------------------
    mac'mac'
    --------------------------------------------------------------------------------
    )分组结束
    --------------------------------------------------------------------------------
    OS'OS'
    --------------------------------------------------------------------------------
    |或
    --------------------------------------------------------------------------------
    OSX'OSX'
    --------------------------------------------------------------------------------
    )分组结束
    --------------------------------------------------------------------------------
    \b单词char(\w)和
    不是单词char的东西
    
    使用

    re.findall(r'\b(?:(?:Mac | Mac)OS | OS X)\b',s)
    

    解释

    --------------------------------------------------------------------------------
    \b单词char(\w)和
    不是单词char的东西
    --------------------------------------------------------------------------------
    (?:组,但不捕获:
    --------------------------------------------------------------------------------
    (?:组,但不捕获:
    --------------------------------------------------------------------------------
    Mac'Mac'
    --------------------------------------------------------------------------------
    |或
    --------------------------------------------------------------------------------
    mac'mac'
    --------------------------------------------------------------------------------
    )分组结束
    --------------------------------------------------------------------------------
    OS'OS'
    --------------------------------------------------------------------------------
    |或
    --------------------------------------------------------------------------------
    OSX'OSX'
    --------------------------------------------------------------------------------
    )分组结束
    --------------------------------------------------------------------------------
    \b单词char(\w)和
    不是单词char的东西
    
    import re with open('macOS.txt','r')作为f:content=f.read()temp=re.findall(\b(?!\wOS\b)\wOS\b)print(f'文本中有{len(temp)}个以OS结尾的单词(OS和macOS除外)。')我想知道这是否正确?import re with open('macOS.txt','r')作为f:content=f.read()pattern=r'macOS'pattern1=r'OS'#用空字符串temp=re.sub(pattern',content)temp=re.sub(pattern1',content)print(temp)print(文本中有{len(temp)}个以OS(操作系统和macOS除外)结尾的字。'))我使用了上面的一个,但我想它只是打印了最后一个温度。。所以我想知道如何用open('macOS.txt','r')作为f:content=f.read()temp=re.findall(\b(?!\wOS\b)\wOS\b)print(文本中有{len(temp)}个以OS结尾的单词(而不是OS和macOS)。)我想知道这是否正确?用open('macOS.txt','r')作为f:content=f.read导入re('模式=r'macOS'模式1=r'OS'