我想删除{}$* \w+ ""
和;
之间的所有内容(例如#
之类的字符):
例如,我想从此字符串中删除:
输入:
OR(AND(CA18*CB18);M10#;ABZZ/kld // remove ;M10#
输出:
OR(AND(CA18*CB18);ABZZ/kld
我用这个正则表达式尝试了它:
^[;]\w+([A-Za-z0-9])[#]
但是,这似乎没有任何建议吗?
答案 0 :(得分:4)
试试这个解决方案:
String input = "OR(AND(CA18*CB18);M10#;ABZZ/kld"; // remove ;M10#
// using String.replaceAll here instead of Pattern/Matcher
//
// | starts with ; included
// || any character, reluctantly quantified
// || | ends with # included
// || | | replace all instances with empty
// || | | string
System.out.println(input.replaceAll(";.+?#", ""));
<强>输出强>
OR(AND(CA18*CB18);ABZZ/kld
答案 1 :(得分:4)
^
表示&#34;字符串&#34;的开头,即您的字符串必须以;
开头,情况并非如此(以O
开头)。
\w+([A-Za-z0-9])
非常多余:\w
实际上是[A-Za-z0-9_]
,所以除非您确实需要_
区分,否则\w+
应该足够< / p>
因此,只需尝试使用:;\w+#
如果您需要;
和#
之间的任何字符(即不仅[A-Za-z0-9_]
):;[^;#]+#
答案 2 :(得分:2)
你的正则表达式只接受两个非符号字符
;[A-z0-9]*?#
会抓住两者之间的任何东西。使用+
而不是*
的相同正则表达式只匹配符号之间至少为char的实例。
答案 3 :(得分:2)
更新问题的解决方案是:
// the actual regex is ;[{}$*\w"']+?#, but extra escaping is needed for Java:
input.replaceAll(";[{}$*\\w\"']+?#", "");
您可以在发现更多边缘情况时更新[]之间的字符集以符合您的实际要求。
如果你决定需要一个黑名单字符,你可以使用带有否定字符集的表达式(^
在[]内,不要在正则表达式的开头混淆^,这表示开头一串):
;[^;#]+?#
答案 4 :(得分:1)
这应该做的工作:
String sURL = "OR(AND(CA18*CB18);M10#;ABZZ/kld";
System.out.println(sURL.replaceAll(";\\w+?#", ""));
答案 5 :(得分:0)
试试这个正则表达式
[^;]*?#;