当前位置: 首页 > 知识库问答 >
问题:

在具有特殊字符和复杂度的空格上拆分Java字符串

仲孙绍元
2023-03-14

我有一个输入字符串像:

-a  var1=Bat"m/an  -b   var2=" -a="lol "  -c  var3=" M^a%g-i=c "

拆分后,我应该得到:

输出

- -a
- var1=Bat"m/an
- -b
- var2=" -a="lol "
- -c
- var3=" M^a%g-i=c "

规则:

  • 格式类似于-(char)(至少一个空格)变量=value
  • 值可以有除空格以外的任何特殊字符。Bat"m/an
  • 值可以有空格,如果在引号例如。"-a="lol""M^a%g-i=c"

我写了正则表达式,但引号内的引号搞砸了:

(?:"[^"]*"|\S)+

此外,我还尝试在=“上解析字符或拆分,但我面临着歧义,因为它们也可能在引号内。

共有2个答案

缪宪
2023-03-14

您可以尝试以下内容:

(-[a-z]|[^\s][^\s]*="?[^"]*"?[^\s]*)

所有参数及其值将作为一个单独的组捕获

解释:

Capturing Group (-[a-z]|[^\s][^\s]*="?[^"]*"?[^\s]*)
1st Alternative -[a-z]
2nd Alternative [^\s][^\s]*="?[^"]*"?[^\s]*
[^\s] - A character which should not be a space
[^\s]* - Matches all non space characters
= checks for equal to as mandatory
= matches the character = literally (case sensitive)
"? checks if " symbol is there
[^"]* checks for all symbols that are not as "
"? Again check for " as option
[^\s]* Finally again check for all non space characters

这里是演示

希望有帮助:)。

钱劲
2023-03-14

您可以使用这个正则表达式来匹配前瞻断言:

-?[a-z_]\w*(?:=".*?"(?=\h+(?:-[a-z](?=\h|$)|[a-z]\w*=)|$)|\S+)?

正则表达式演示

RegEx解释:

  • - :以可选连字符开头

 类似资料:
  • 我想用空格和特殊字符(如果有的话)来分割字符串。例如:用于表示移动交换中心(信号强度)。 目前我正在使用正则表达式来拆分字符串,但我无法同时实现空格和特殊字符的拆分。 更新代码:

  • 我目前正在尝试将字符串拼接成多行字符串。正则表达式应选择前面有 13 个字符的空格。 问题在于,13个字符的计数在前一个选定的空白之后不会重置。因此,在前13个字符之后,正则表达式选择每个空白。 我使用以下正则表达式,其 13 个字符: (结尾有一个空格) 您可以在这里测试正则表达式和以下代码: 此代码的输出如下所示: 这是个测试。 应用 应在 13 个字符后的空格上以子字符串分隔此字符串 但应该

  • 问题内容: 我正在寻找ElasticSearch嵌套查询,它将使用C#在字符串上提供完全匹配的字符串。 例如-我想搜索“ XYZ Company Solutions”之类的词。我尝试使用querystring查询,但是无论搜索结果如何,它都会为我提供所有记录。我也阅读了帖子,发现我们必须为该字段添加一些映射。我在现场尝试了“ Not_Analyzed”分析仪,但仍然无法正常工作。 这是我的C#代码

  • 我想把一个有空格或任何特殊字符的句子分成一个单词数组,空格或特殊字符也是数组的一个元素。 句子像: 应拆分为字符串数组: 请建议使用任何正则表达式或逻辑来使用java进行拆分。 我的问题漏了一件事。我还需要拆分数字字符。。但是使用split(“\b”)并不能拆分具有以下内容的字符串: abc12def 成

  • 问题内容: 我需要从字符串中删除所有特殊字符,标点符号和空格,以便只有字母和数字。 问题答案: 这可以不用正则表达式来完成: 您可以使用: 如果您坚持使用正则表达式,则其他解决方案也可以。但是请注意,如果可以在不使用正则表达式的情况下完成此操作,那么这是最好的解决方法。

  • 问题内容: 我对Regex的经验不足,但是我已经阅读了很多。假设有一个字符串,我想要一个列表,该列表的字符串分为两个部分。我的方法是让一个小组检查是否是数字,然后检查该小组是否重复。像这样 我认为基本上可以检查“ digit”或“ digit +”是否相同。我认为这可以满足我的要求。 问题答案: 用途: