我正在尝试使用正则表达式从字符串中提取特定句子。
输入字符串:
酒店位置住在迪拜德拉(Deira)的Al Buraq酒店,只需几分钟便能到达黄金市场和香料市场。这家酒店距离迪拜购物中心(Dubai Mall)8.6英里(13.9公里),距离中心9英里(14.5公里)。
阿联酋购物中心和迪拜滑雪道。这家酒店距离赛马场9.1英里(14.6公里)。
预期的输出字符串:
实际输出字符串:
下面是我的代码
component.ts
regex = /This(.*)hotel(.*)from(.*?)((.)|(?=and))/;
// regex = new RegExp('This(.*)hotel(.*)from(.*?)((.)|(?=and))')
template.html
<div>
{{hotel.HotelInfo.HotelDescription.match(regex)?hotel.HotelInfo.HotelDescription.match(regex)[0]:null}}
</div>
我已经使用this website测试了此正则表达式,并且效果很好。
答案 0 :(得分:3)
模式from(.*?)((.)|(?=and))
的这部分与 from 相匹配,然后至少与任何字符匹配.*?
,然后使用点(.)
匹配任何字符或|
使用肯定的前瞻(?=and)
在这两种情况下,中的右侧都有一个字符,因此将被匹配。
您可以使比赛更具体:
\bThis hotel is \d+(?:\.\d+)? mi \(\d+(?:\.\d+)? km\) from .*?(?= and|$)
部分图案
\bThis hotel is
字面上匹配\d+(?:\.\d+)?
将1个以上的数字与可选的小数部分匹配 mi
字面上匹配\(
匹配(
\d+(?:\.\d+)?
km) from
字面上匹配.*?
匹配除换行符非贪婪以外的所有字符(?= and|$)
前瞻性,断言右边是 and
或字符串的结尾答案 1 :(得分:2)
您应该使用非贪婪匹配在第一个 处停止:
This.*hotel.*?from.*?(?= and|$)
.*from
与最长的文本匹配:is 8.6 mi (13.9 km) from Dubai Mall and 9 mi (14.5 km) from
。
每个部分都属于这些文本:
This "This" "This"
.* " " " "
hotel "hotel" "hotel"
.*? " is 8.6 mi (13.9 km) " " is 9.1 mi (14.6 km) "
from "from" "from"
.*?(?= and|$) " Dubai Mall" " Race."