我有这个代码块,它通过一个文本文件,逐行抓取它并将其分成单独的单词。这一切都很好,但在我的文本文件中,我有一些以' - '开头并以' - '结尾的单词和短语,例如'-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
答案 0 :(得分:2)
在没有分隔符的情况下调用str.split()
会按空格分割文本,因此您不会将-
用作分隔符。
您可以re.findall()
使用模式(-.+?-)
:
matches = re.findall(r'(-.+?-)', 'This is a -string- with a -foo bar-')
print(matches) # ['-string-', '-foo bar-']
答案 1 :(得分:1)
这个正则表达式完全抓住你想要的东西。
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-']