首页 > 解决方案 > 如何编写一个正则表达式来满足所有情况并打印指定的变量

问题描述

我想在文件中找到一些语句。我需要打印出元素和子元素名称。语句如

set element elemName subElem sumElemName

如果元素或子元素名称包含一个或多个空格,则整个字符串必须用双引号括起来。如果元素或子元素名称中没有空格,则双引号是可有可无的。所以以下陈述是有效的。

set element "aaa bbb" subElem "ccc"
set element "aaa bbb" subElem ccc
set element "aaa" subElem "ccc"

我试着写两个表达式来满足一些情况。但是如何编写一个正则表达式来满足所有情况呢?

String regex = "^\\s*set\\s+element\\s+\"(.*)\"\\s+subElem\\s+\"(.*)\"\\s*$";
String regex = "^\\s*set\\s+element\\s+(?<!\")(\\S+)\\s+subElem\\s+(?<!\")(\\S+)\\s*$";

标签: javaregex

解决方案


您可以将双引号内的子字符串或一大块非空白字符匹配为elemNames

String regex = "^\\s*set\\s+element\\s+(\"[^\"]*\"|\\S+)\\s+subElem\\s+(\"[^\"]*\"|\\S+)\\s*$";

查看正则表达式演示

模式(\"[^\"]*\"|\S+)匹配

  • \"[^\"]*\"- a ,然后是除然后 a之外的"任何 0+ 个字符""
  • |- 或者
  • \S+- 1+ 非空白字符。

推荐阅读