如何从字符串中删除特定的特殊字符模式

5

我有一个字符串叫做s,

String s = "<NOUN>Sam</NOUN> , a student of the University of oxford , won the Ethugalpura International Rating Chess Tournament which concluded on Dec.22 at the Blue Olympiad Hotel";  

我希望能从字符串中删除所有 <NOUN> 和 </NOUN> 标记。我使用了以下方法来移除标记:

s.replaceAll("[<NOUN>,</NOUN>]","");

是的,它会删除标签。但它也会从字符串中移除字母 'U' 和 'O',导致以下输出结果。

 Sam , a student of the niversity of oxford , won the Ethugalpura International Rating Chess Tournament which concluded on Dec.22 at the Blue lympiad Hotel

请问如何正确地做这件事?

4个回答

17

尝试:

s.replaceAll("<NOUN>|</NOUN>", "");
在正则表达式中,语法[...]将匹配方括号内的每个字符,无论它们出现的顺序如何。因此,在您的示例中,所有出现的"<", "N", "O"等都将被删除。而应该使用竖线 (|) 来匹配"<NOUN>"和"</NOUN>"。以下内容也可以实现相同的效果(被认为更加DRY和优雅),因为它将同时匹配带有和不带有斜杠的标签:
s.replaceAll("</?NOUN>", "");

2

String.replaceAll()方法的第一个参数是一个正则表达式,该正则表达式:

"[<NOUN>,</NOUN>]"

方括号内定义了需要识别并移除的字符集。因此,您需要移除<>/NOU和逗号。

也许实现您想要的最简单方法是执行以下操作:

s.replaceAll("<NOUN>","").replaceAll("</NOUN>","");

这是一段涉及it技术的文本,它明确说明了要移除的内容。当然,更复杂的正则表达式也是可能的。


0
你可以使用一个正则表达式来实现这个功能:"<[/]*NOUN>"。
s.replaceAll("<[/]*NOUN>","");

应该可以解决问题。"[/]*"匹配"<"后零个或多个"/"。


这应该也将</////名词>替换为""吗?[/]+应该可以解决问题,我猜? - Senthil Kumar
正确的解决方案应该是s.replaceAll("</?NOUN>","");,因为问号匹配前面项的0或1个。 - Hubro

0
尝试这样做:String result = originValue.replaceAll("\\<.*?>", "");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接