我正在尝试匹配一个模式并替换它。但是,程序没有退出,所以我怀疑正则表达式是错误的,因此它没有检测和替换正确的模式。这是我试图替换的模式:
Q_n(0;\al,\be,N)
下面是我的代码,应该使用正则表达式检测它并将其替换为:
\HahnQ{n}@{0}{\al}{\be}{N}
谢谢!
while(line.contains("Q_n")){
line.replaceAll("Q_n\\(([^;]+?);([^,]+?),([^,]+?),([^\\)]+?)\\)", "\\HahnQ{n}@{$1}{$2}{$3}{$4}");
}
最佳答案
我怀疑您的问题是您忘记了字符串是不可变的,因此像 replaceAll
这样的方法不会更改调用它的原始字符串,而是创建另一个字符串。
此外,您还使用了 while
,但 replaceAll
将替换您出现的所有内容
模式所以 if
应该足够了。
另一件事:如果 "\\H"
应该表示文字 \H
那么你需要将其写为 "\\\\H"
因为 \
也是替换中的特殊字符,所以如果你想创建文字 \
它需要被替换为另一个 \\
需要写成 "\\\\"
(就像在正则表达式中一样)`。
if(line.contains("Q_n")){
line = line.replaceAll("Q_n\\(([^;]+?);([^,]+?),([^,]+?),([^\\)]+?)\\)", "\\\\HahnQ{n}@{$1}{$2}{$3}{$4}");
}
顺便说一句,您不需要让量词不情愿 ([^;]+?);
因为 [^;]
永远不会匹配 ;
,所以与 ([^;]+);
相同(同样适用于 ([^,]+?),
)。
此外,您不必在字符类 []
内转义 )
([^\\)]+?)\\)
^^ ^^
| +-- correct, `)` is outside of any character class `[...]`
+---------- redundant, character class doesn't consider `)` as metacharacter
关于java - 这是正确的模式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23898066/