我有一个天气预报列表,它以类似的前缀开头,我想删除它。我还想记录下城市名称:
一些例子:
如果你在菲尼克斯、图森、弗拉格斯塔夫有度假或婚礼计划,
盐湖城,公园城,丹佛,埃斯特斯公园,科罗拉多泉,
普韦布洛,或阿尔伯克基,这周将…
如果你有迈阿密,杰克逊维尔,梅肯的度假或婚礼计划,
夏洛特,或者查尔斯顿,需要几个系统…
如果你在费城的匹兹堡有度假或结婚计划,
大西洋城、纽瓦克、巴尔的摩、里士满、查尔斯顿或
多佛,期待这个星期…
字符串以一个常见的前缀“如果您在中有度假或婚礼计划”开头,最后一个城市的前缀是“或”。城市名单是可变长度的。
我试过这个:

>>> text = 'If you have vacation or wedding plans in NYC, Boston, Manchester, Concord, Providence, or Portland'
>>> re.search(r'^If you have vacation or wedding plans in ((\b\w+\b), ?)+ or (\w+)', text).groups()
('Providence,', 'Providence', 'Portland')
>>>

我想我离得很近,但显然不行。我从来没有尝试过用不同数量的捕获项目做什么;任何指导都会非常感谢。

最佳答案

import re
s = "If you have vacation or wedding plans for Miami, Jacksonville, Macon, Charlotte, or Charleston, expect a couple systems"
p = re.compile(r"If you have vacation or wedding plans (in|for) ((\w+, )+)or (\w+)")
m = p.match(s)
print m.group(2) # output: Miami, Jacksonville, Macon, Charlotte,
cities = m.group(2).split(", ") # cities = ['Miami', 'Jacksonville', 'Macon', 'Charlotte', '']
cities[-1] = m.group(4) # add the city after or
print cities # cities = ['Miami', 'Jacksonville', 'Macon', 'Charlotte', 'Charleston']

城市可以通过模式(\w+, )or (\w+)来匹配。
按模式划分城市
顺便说一下,由于该模式用于许多数据,it is preferred to work with the compiled object
注意:根据您提供的示例,单词comes after plan可以是,for

09-10 03:39
查看更多