簡體   English   中英

在python中使用正則表達式提取實體

[英]Extract entity using regex in python

我所擁有的: “高峰時間在location1location2行駛location3location4行駛,location5location6行駛 。”

例如: “高峰時段在ulsoor湖jn前往nagatheatre jn,okalipuram前往雄偉,而竹市集jn前往科爾公園jn。”

我想要的是:在python中使用正則表達式提取位置

例:

[('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")

我得到的是

(“朝向nagatheatre jn的ulsoor湖jn,通往雄偉的竹市集jn的okalipuram”,“科爾公園jn”)

可以看出,僅當存在與模式匹配的子表達式時,它才與外部表達式匹配。 請幫忙。 謝謝。

您實際上需要做兩件事。 首先-就像我的評論所說-使用(.*?)而不是(.*)這樣您的捕獲不會變得貪婪。

第二點-使用前瞻性斷言,這樣在確定捕獲在哪里結束時就不會前進解析器,

第三,使用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")]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM