早些时候,我无法提出确切的问题。我很抱歉。
以下是我要找的内容:
我正在从文件中读取一个字符串,如下所示,文件中可能有多种这样的字符串。
" VEGETABLE 1
POTATOE_PRODUCE 1.1 1SIMLA(INDIA)
BANANA 1.2 A_BRAZIL(OR INDIA)
CARROT_PRODUCE 1.3 A_BRAZIL/AFRICA"
我想使用findall捕获整个字符串作为输出。
我的剧本:
import re
import string
f=open('log.txt')
contents = f.read()
output=re.findall('(VEGETABLE.*)(\s+\w+\s+.*)+',contents)
print output
上面的脚本输出为
[('蔬菜1',' \ n CARROT_PRODUCE 1.3 A_BRAZIL / AFRICA')]
但缺少中间的内容。
答案 0 :(得分:0)
在这个答案的最后一个片段中的解决方案。
>>> import re
>>> str2='d1 talk walk joke'
>>> re.findall('(\d\s+)(\w+\s)+',str2)
[('1 ', 'walk ')]
输出是一个只有一次给定模式的列表。列表中的元组包含两个字符串,它们匹配模式
中()中给定的相应两个分组删除了最后一个' +'这使得模式选择第一场比赛而不是贪婪的最后一场比赛
>>> re.findall('(\d\s+)(\w+\s)',str2)
[('1 ', 'talk ')]
添加了一个组以查找后跟一个或多个空格的第三个单词。但如果刺痛有超过3个单词后跟空格,那么仍然只能找到三个单词。
>>> re.findall('(\d\s+)(\w+\s)(\w+\s)',str2)
[('1 ', 'talk ', 'walk ')] #
使用' |'匹配模式multipel次。注意元组已经消失了。另请注意,第一场比赛不包含该号码。这可能是因为\ w是\ d
的超集>>> re.findall('\d\s+|\w+\s+',str2)
['d1 ', 'talk ', 'walk ']
>>> re.findall('\d\s+|[a-z]+\s+',str2)
['1 ', 'talk ', 'walk ']
希望这有帮助。