正则表达式用两条规则捕获字符串

Regex to capture string with two rules

我有以下正则表达式,应该在第一个短语上捕获一组,在第二个短语上捕获三个组。 但出于某种原因,当我添加带有两个正确组的可选组时,它不会捕获字符串 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+))?$

regex demo

详情

  • ^ - 字符串开头
  • (?<FULLTEXT>.*?) - 组"FULLTEXT":除换行字符外的任何0个或多个字符,尽可能少
  • \s* - 0+ 个空格
  • (?:(?<AREA>[a-z]{4})\s*(?<SQRM>\d+))? - 一个可选的序列
    • (?<AREA>[a-z]{4}) - 组 "AREA":四个字母
    • \s* - 0+ 个空格
    • (?<SQRM>\d+) - 组 "SQRM":1+ 位数
  • $ - 字符串结尾。