正则表达式查找特殊字符之间的子字符串

时间:2011-01-24 20:03:27

标签: java regex

我在Java中遇到了这个问题。

我的数据字符串包含&;之间的实体。例如

&Text.ABC;, &Links.InsertSomething; 

这些实体可以是我们所拥有的ini文件中的任何内容。

我需要在输入字符串中找到这些字符串并将其删除。输入字符串中可能没有,一次或多次出现这些实体。

我正在尝试使用正则表达式进行模式匹配和失败。

有人可以为这个问题建议正则表达式吗?

谢谢!

3 个答案:

答案 0 :(得分:3)

这是正则表达式:

"&[A-Za-z]+(\\.[A-Za-z]+)*;"

首先匹配字符&,然后是一个或多个字母(大写和小写)([A-Za-z]+)。然后它匹配一个点后跟一个或多个字母(\\.[A-Za-z]+)。可以有任意数量,包括零。最后,它匹配;字符。

您可以在java中使用此正则表达式:

Pattern p = Pattern.compile("&[A-Za-z]+(\\.[A-Za-z]+)*;"); // java.util.regex.Pattern
String subject = "foo &Bar; baz\n";
String result = p.matcher(subject).replaceAll("");

或者只是

"foo &Bar; baz\n".replaceAll("&[A-Za-z]+(\\.[A-Za-z]+)*;", "");

如果要在匹配的标记后删除空格,可以使用此re:

"&[A-Za-z]+(\\.[A-Za-z]+)*;\\s*" // the "\\s*" matches any number of whitespace

答案 1 :(得分:1)

还有一个很好的在线正则表达式测试程序,它使用java正则表达式库。

http://www.regexplanet.com/simple/index.html

答案 2 :(得分:0)

您可以尝试:

input=input.replaceAll("&[^.]+\\.[^;]+;(,\\s*&[^.]+\\.[^;]+;)*","");

See it