[英]Extract entity using regex in python
我所擁有的: “高峰時間在location1朝location2行駛 , location3朝location4行駛,而location5朝location6行駛 。”
例如: “高峰時段在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.