我有这样的大块文字:
|!?:some_text!?:|
|!?some_text!?|
|?:some_text?:!|
...
在所有情况下,我想剥离|
?
!
和:
(它们不能一起发生,但它们处于领先和尾随位置)得到some_text
。
当我使用以下表达式在|
类中编译时,我在使用Java中的regex引擎处理Pattern
时遇到问题:
^[?:!\|]+
[?:!\|]+$
答案 0 :(得分:1)
也许,您将|
混淆为一个交替运算符(在字符类之外未转义|
)和一个字符类内的文字未转义管道|
。
请参阅此IDEONE demo:
String p = "^[?:!|]+|[?:!|]+$";
System.out.println("|!?:some_text!?:|".replaceAll(p, ""));
System.out.println("|!?some_text!?|".replaceAll(p, ""));
System.out.println("|?:some_text?:!|".replaceAll(p, ""));
正则表达式^[?:!|]+|[?:!|]+$
中有3个管道:在一个字符类中(在[...]
之间)它是一个文字管道符号,在它之外,它是一个交替运算符。
答案 1 :(得分:1)
使用这一行
String str = "|!?:some_text!?:|";
str = str.replaceAll("[:!|?]", "");
我希望它符合标准:)