我正在尝试使用正则表达式从字符串中提取特定句子。
输入字符串:
酒店位置 阿尔布拉克酒店位于迪拜德伊勒,距离黄金市场和香料市场仅数步之遥。此酒店距离迪拜购物中心 8.6 英里(13.9 公里),距离中心 9 英里(14.5 公里)。
阿联酋购物中心和迪拜滑雪场步道。此酒店距离瑞斯 9.1 英里(14.6 公里)。
预期输出字符串:
- 此酒店距离迪拜购物中心 13.9 公里(8.6 英里)
- 此酒店距离雷斯 14.6 公里(9.1 英里)。
实际输出字符串:
- 此酒店距离13.9 公里(8.6 英里)
- 此酒店距离 14.6 公里(9.1 英里)
下面是我的代码
组件.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 测试了这个正则表达式而且效果很好。
最佳答案
模式的这部分from(.*?)((.)|(?=and))
匹配from,然后尽可能匹配任何字符.*?
后跟使用点 (.)
或 |
匹配任何字符,断言右侧的内容是 和 使用正向前瞻 (?=and)
在这两种情况下,from 右侧都有一个字符,因此将进行匹配。
您可以使匹配更加具体:
\bThis hotel is \d+(?:\.\d+)? mi \(\d+(?:\.\d+)? km\) from .*?(?= and|$)
部分模式
\b这家酒店是
按字面意思匹配\d+(?:\.\d+)?
匹配 1+ 位数字和可选的小数部分mi
按字面匹配\(
匹配(
\d+(?:\.\d+)?
km) from
按字面匹配.*?
匹配除换行符以外的任何字符,非贪婪(?= and|$)
正向前瞻,断言右侧是and
或字符串结尾
关于正则表达式在 Angular 模板中无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58922397/