java - 如何编写一个正则表达式来满足所有情况并打印指定的变量
问题描述
我想在文件中找到一些语句。我需要打印出元素和子元素名称。语句如
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*$";
解决方案
您可以将双引号内的子字符串或一大块非空白字符匹配为elemNames
:
String regex = "^\\s*set\\s+element\\s+(\"[^\"]*\"|\\S+)\\s+subElem\\s+(\"[^\"]*\"|\\S+)\\s*$";
查看正则表达式演示
模式(\"[^\"]*\"|\S+)
匹配
\"[^\"]*\"
- a ,然后是除然后 a之外的"
任何 0+ 个字符"
"
|
- 或者\S+
- 1+ 非空白字符。
推荐阅读
- python - 多列熊猫上的ApplyMap函数
- lotus-notes - (NotesView)如何捕捉字段中的具体值?
- c - 如何编写一个计算输入正数的平均值并忽略负数的程序
- flutter - Flutter:在上下文不可用时使用 changeNotifier 和 provider
- python - python中有没有办法将图像写入word文件?
- python - 循环遍历数组(key by key) | 通过将每个键添加到路径中来不断检查每个键
- ios - 为什么 SFSpeechRecognizer 在 ipad 中不起作用
- html - 无论如何使用 justify: space-between on li 没有嵌套的 div?
- python - 使用 scapy 生成 LACP 流量
- android - 未安装 Flutter Doctor、Flutter & Dart 插件