【发布时间】:2018-08-21 12:01:07
【问题描述】:
我正在尝试使用下面的正则表达式。
正则表达式:
(\d+[\s\,\d.]*\s*(carpet|sft|feet|sqft|yard|gaj|feet|s.ft|sq.ft|sq feet|fq.ft.|sq.ft.
|pt|crpt|ft|sq.mt.|sq.mtr|sq.mt|plot|sf|sfqt|acer|gj|vigha|anna|gunta|sq|
gunthe|guntha|bigha|sqd|sqm|sqyd|area|acre|square|yrd|
sq.yard|sq yd|sq.yd|sq. yd.|gaj|sqt)s?)
输入文字:
kanakiya area 1350 sqft asking price : 95 lacs destination properties azymn - 9920902674
plot on rent near sp ring road rajpath club ki gali me road touch 5000 war na 350000 rent owner side no b
它正确匹配所有必需的字符串,但它也匹配9920902674
plot
我不想匹配文本中由换行符分隔的单词。
您可以Compile above regex 更好地理解。 我们怎么能不在匹配之间包含新行。想要匹配单词之间有空格的单词。
谢谢
PS:我已经从之前的问题中更改了这个问题,因为它没有得到很好的接受并且我的帐户已关闭。因此,尝试改进问题以解锁帐户。
请忽略之前的答案和cmets。
【问题讨论】:
-
我建议将正则表达式拆分为 2 个备选方案,
<prefixes>\s*(<NUM>)|(<NUM>)\s*<suffixes>。类似于(\d[. \d\t]*)(?:pkg\b|k\b|lac\.|lakh\.|crore\.|cr\.|l\b)|\b(?:rent|rs)\.\s*(\d[. \d\t]*)。见this Python demo, too。 -
您可能不需要正则表达式。这是一个更好的方法:(1)创建包含所有货币类型的字典(2)拆分输入文本并查看货币类型的左侧。
-
根据你真正想要的,你也可以选择
(rent|rs)?([\s.]*\d+[\s\d.]*)(pkg|k|(?:la(?:c|kh)|crore|cr)s?|l)。在此处查看现场演示regex101.com/r/ziAOMw/4 -
谢谢大家。效果很好。
标签: python regex regex-negation regex-group regex-greedy