删除字符间的字符串

时间:2014-06-23 12:19:20

标签: java regex

我想删除{}$* \w+ "";之间的所有内容(例如#之类的字符):

例如,我想从此字符串中删除:

输入:

OR(AND(CA18*CB18);M10#;ABZZ/kld // remove ;M10#

输出:

OR(AND(CA18*CB18);ABZZ/kld

我用这个正则表达式尝试了它:

^[;]\w+([A-Za-z0-9])[#]

但是,这似乎没有任何建议吗?

6 个答案:

答案 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_]):;[^;#]+#

Regular expression visualization

Debuggex Demo

答案 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)

试试这个正则表达式

[^;]*?#;