在python中使用regex提取实体

2024-05-15 08:06:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我所拥有的:“在位置1朝向位置2位置3朝向位置4位置5朝向位置6的高峰小时交通量”

示例: “ulsoor lake jn向nagatheatre jn、okalipuram向majestic和bamboo bazaar jn到cole's park jn的高峰时段交通。”

我想要的是: 在python中使用regex提取位置。在

示例:

[('ulsoor lake jn','nagatheatre jn'),('okalipuram','majestic'),('bamboo bazaar jn',“cole's park jn”)]

我做了些什么:

>>> regex1 = '(?:\sat\s|,|and)(.*) towards (.*)(?:\.|,|and)'
>>> re.search(regex1, "peak hour traffic at ulsoor lake jn towards nagatheatre jn, okalipuram towards majestic and bamboo bazaar jn towards cole's park jn.").groups()
15: ('ulsoor lake jn towards nagatheatre jn, okalipuram towards majestic and bamboo bazaar jn',
"cole's park jn")

我得到了什么

('ulsoor lake jn朝向nagatheatre jn,okalipuram朝向majestic and bazaar jn', “科尔公园”(cole's park jn))

可以看出,只有当有子表达式与模式匹配时,它才匹配外部表达式。请帮忙。谢谢您。


Tags: and示例parkjnbazaarlakemajesticbamboo
1条回答
网友
1楼 · 发布于 2024-05-15 08:06:24

你真的需要一些东西。首先,正如我的评论所说,使用(.*?)而不是{},这样你的捕获就不会贪婪了。在

第二,使用前瞻性断言,这样在确定捕获的结束位置时,就不会推进解析器

第三,使用findall代替search。在

>>> r = re.compile('(?:\sat\s|,|and)(.*?) towards (.*?)(?=\.|,|and)')
>>> s = "peak hour traffic at ulsoor lake jn towards nagatheatre jn, okalipuram towards majestic and bamboo bazaar jn to wards cole's park jn."
>>>
>>> r.findall(s)
[('ulsoor lake jn', 'nagatheatre jn'), (' okalipuram', 'majestic '), (' bamboo bazaar jn', "cole's park jn")]

相关问题 更多 >