Java正则表达式删除一组字符但不删除顶点之间的字符

标签 java regex

我正在尝试使用 Java Regex,以便仅删除不在顶点内的字符集中的字符。顶点之间的字符始终只有一个。 这是我输入的示例:

/src(;/unit/expr_stmt[3]/expr/operator[4]=')'\n

这是我想要的输出:

/src/unit/expr_stmt[3]/expr/operator[4]=')'\n

我尝试过使用负向前瞻,但无法达到预期的结果。 这是我编写的正则表达式:

[\\s;\\(\\),]+(?!('[^']+'))

我需要使用 Java Regex,因为我有几个不同的输入。 有人可以帮助我吗?

最佳答案

您可以匹配并捕获所有以'开头的子字符串,然后有0+个除'之外的字符,并且有' 就在之后。然后,匹配您需要在所有其他上下文中删除的字符。作为替换模式,使用对捕获值的反向引用,以便在最终结果中恢复它:

s=s.replaceAll("('[^']*')|[\\s;(),]+","$1");

详细信息:

  • ('[^']*') - 捕获匹配 ' 的组 1,除 ' 之外的 0+ 个字符,然后 '
  • | - 或
  • [\\s;(),]+ - 1+ 个空格,;, (, ),

替换模式中的 $1 指的是存储在捕获组 1 内的值。

注意:如果可以转义',则需要将'[^']*'替换为' [^'\\\\]*(?:\\\\.[^'\\\\]*)*'.

关于Java正则表达式删除一组字符但不删除顶点之间的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42690783/

相关文章:

java - 3总和: avoid duplicates

python - 在 vs re.search python 中

python - Django 2.0 密码验证

正则表达式格式电话 (+00) 000 000 00 00 | (+00) 000-000-00-00​

java - 避免在 Java 中重叠正则表达式匹配

java - 如何使用 MySQL Connector/J 直接检索 UTC OffsetDateTime?

java - 我输入了一个数字,但它给了我错误

java - 如何将 Hibernate String 列转换为 Enum?

java - PostgreSQL 中 Long 数据类型的等价物是什么?

regex - dplyr内的正则表达式匹配