【问题标题】:Grab certain words and phrases from a text file in Python从 Python 中的文本文件中获取某些单词和短语
【发布时间】:2013-04-06 16:39:06
【问题描述】:

我有这个代码块,它遍历一个文本文件,逐行抓取它并将其拆分为单独的单词。这一切都很好,但是在我的文本文件中,我有某些以“-”开头和结尾的单词和短语,例如,“-foo-”或“-foo bar-”。现在,它们被拆分为“-foo”和“bar-”的代码。不过,我理解为什么会这样。

我的计划是抓取那些以 '-' 开头和结尾的实例,将它们存储到一个单独的列表中,然后用户将这些短语中的每一个更改为新的内容,然后将它们放回列表中。如果它是两个单独的单词,我如何告诉它抓取某个短语?

def madLibIt(text_file):
    listOfWords = [] #creates a word list
    for eachLine in text_file: #go through eachLine, and split it into 
        #seperate words
        listOfWords.extend(eachLine.split())
 print listOfWords

【问题讨论】:

  • 虽然我已经回答了你的问题,但我相信你的想法还是有一些缺陷的。具体来说,- 字符非常常见,使用它作为分隔符可能会导致问题,连字符的单词会发生什么? (如:旋转木马)或者当它被用作句子的一部分时 - 像这样?如果您可以提供有关您的用例、您正在尝试做什么的更多信息,也许有更好的解决方案?
  • 实际上,我使用的字符是 _ 字符,但最终我的文本变成了斜体,所以我不得不使用 - 代替。

标签: python string list for-loop


【解决方案1】:

在不使用分隔符的情况下调用 str.split() 会以空格分隔文本,因此您不会使用 - 作为分隔符。

您可以将re.findall()(-.+?-) 模式一起使用:

matches = re.findall(r'(-.+?-)', 'This is a -string- with a -foo bar-')
print(matches) # ['-string-', '-foo bar-']

【讨论】:

    【解决方案2】:

    这个正则表达式正好抓住你想要的。

    import re
    
    s = 'This is a string with -parts like this- and -normal- parts -as well-'
    
    print re.findall(r'((?:-\w[\w\s]*\w-)|(?:\b\w+\b))', s)
    
    >>> 
    ['This', 'is', 'a', 'string', 'with', '-parts like this-', 'and', '-normal-', 'parts', '-as well-']
    

    【讨论】:

    • 此代码有效,但我注意到该代码会在大文本文件中的非字母字符前后立即抛出任何单词(例如,a/an 仅返回 an,而term '-plural noun-. and' 抛出了名词和单词 'and' ”。此外,此代码不会使用“'s”获取任何单词(例如,将 'split' 放入其中并且's'。对不起,如果我的问题太简单了,我对正则表达式真的很陌生。
    • 很抱歉,它不能作为您的复制粘贴答案。如果你能提供更准确的数据样本,那么我会构建一个更好的正则表达式。但是,我的回答旨在为您使用正则表达式时遇到的问题提供解决方案,因为我只有您提供的有限信息可以使用,这就是我使用的示例。您已经选择了不同的答案,我不会用更好的正则表达式重新编辑我的答案,尽管我很确定如果您愿意,您可以自己制作一个。祝你好运。
    猜你喜欢
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多