【问题标题】:Regex to capture string with two rules正则表达式用两条规则捕获字符串
【发布时间】:2020-06-09 22:50:54
【问题描述】:

我有以下正则表达式,应该在第一个短语上捕获 1 个组,在第二个短语上捕获三个组。 但是由于某种原因,当我添加带有两个正确组的可选组时,它不会捕获字符串一。

正则表达式(不区分大小写)

(^(?<FULLTEXT>.*))\s?(?:(?<AREA>[a-z]{4,4}).(?<SQRM>[\d]+))$

短语

MASTER BEDROOM

LIVING ROOM LVRM 103

短语永远是: 1 - 全文 2 - 以 AREA 结尾 - 4 个字符串(总是)+ SQRM 3 位数字(总是)。在此之前的任何内容都是全文。

第 2 句捕捉到: 全文 - 客厅 面积 - LVRM SQRM - 103

第 1 句应该只捕获 FULLTEXT,但它什么也不捕获......

欢迎提出任何建议。

【问题讨论】:

  • 使用^(?<FULLTEXT>.*?)\s*(?:(?<AREA>[a-z]{4})\s*(?<SQRM>\d+))?$,见demo
  • 哇,漂亮的@WiktorStribiżew,谢谢!我会接受你的回答
  • 如果字符串为'LIVING 103',则匹配和捕获什么(如果有的话)?
  • @CarySwoveland 预处理器将确保不会发生这种情况,但谢谢!

标签: regex regex-group


【解决方案1】:

你可以使用

^(?<FULLTEXT>.*?)\s*(?:(?<AREA>[a-z]{4})\s*(?<SQRM>\d+))?$

regex demo

详情

  • ^ - 字符串开头
  • (?&lt;FULLTEXT&gt;.*?) - 组“FULLTEXT”:除换行符之外的任何 0 个或多个字符,尽可能少
  • \s* - 0+ 个空格
  • (?:(?&lt;AREA&gt;[a-z]{4})\s*(?&lt;SQRM&gt;\d+))? - 可选序列
    • (?&lt;AREA&gt;[a-z]{4}) - “区域”组:四个字母
    • \s* - 0+ 个空格
    • (?&lt;SQRM&gt;\d+) - 组“SQRM”:1 位以上
  • $ - 字符串结束。

【讨论】:

    猜你喜欢
    • 2012-08-20
    • 2016-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-17
    • 2020-06-04
    相关资源
    最近更新 更多