Java-正则表达式,只要包含特定字符串,就可以删除方括号之间的内容
我有一句话:Java-正则表达式,只要包含特定字符串,就可以删除方括号之间的内容,java,regex,Java,Regex,我有一句话: String sentence = "FirstName LastName (pronounced as: X) (born 1 June 1900)"; 我需要正则表达式,只要括号之间的文本包含单词:发音,它就可以去掉括号(包括括号)之间的所有内容 产生如下输出: "FirstName LastName (born 1 June 1900)" 请让我知道如何。。。谢谢。您可以尝试以下正则表达式: (?=\\([^()]*?pronounced)\\([^)]+\\) 和一个
String sentence = "FirstName LastName (pronounced as: X) (born 1 June 1900)";
我需要正则表达式,只要括号之间的文本包含单词:发音,它就可以去掉括号(包括括号)之间的所有内容
产生如下输出:
"FirstName LastName (born 1 June 1900)"
请让我知道如何。。。谢谢。您可以尝试以下正则表达式:
(?=\\([^()]*?pronounced)\\([^)]+\\)
和一个空的替换字符串
Java代码:
String input = "FirstName LastName (pronounced as: X) (born 1 June 1900)";
String result = input.replaceAll("(?=\\([^()]*?pronounced)\\([^)]+\\)", "");
这样的模式应该可以工作:
\((?=[^)]*pronounced)[^)]+\)
这将匹配文字(
后接一个或多个字符,而不是)
后接文字)
,但前提是它还包含发音为的文字
不要忘记用Java字符串文字转义\
:
output = input.replaceAll("\\((?=[^)]*pronounced)[^)]+\\)", "");
无需前瞻,否定字符类完成以下任务:
/\([^)]*pronounced[^)]*\)/
那些不是括号{}
。那些是括号,对我们来说,{}
@pguardiario-@DaoWen,是括号。坚持下去,你会学到一些东西。@pguardiario-好吧,你最好告诉编写Java语言规范的人,因为显然“块是一系列语句、局部类声明和局部变量声明,放在大括号内。”此外,我想提出的最初观点是,StackOverflow是一个国际社会,我们应该熟悉一些非美国英语术语。(是的,我注意到你的个人资料上说你来自菲律宾。)不错,但前瞻是不必要的。很好,效果很好。它将如何与嵌套一起工作。。。有时,我的文本可能有如下内容:String input=“FirstName LastName((发音为:X)(生于1900年6月1日))”。在这种情况下,我需要保留(生于1900年6月1日)。你能帮忙吗?@jjj使用当前的表达式这将给你留下FirstName LastName(生于1900年6月1日))
。您希望实际输出结果如何?@jjj我对我的答案做了一点修改,请检查编辑。@Sniffer-您的第一个正则表达式(?=\\(.*?发音)\\([^]+\\)
匹配'(不匹配)
(发音应匹配)'。第二个更好。@sln你说得对。谢谢你的观察。我将删除第一个表达式……如果您只需要最里面的一组可能嵌套的括号,则仍然不需要lookaheads:\([^()]*发音[^()]*\)
。为什么其他人都那么拘泥于外表?只是好奇,这个/\([^)]*?发音[^]*\)/
能减少回溯吗?@Alan Moore-我认为当人们理解这些断言时,它们往往会被人们过度使用。这可能是额外的处理。如果发音的总是看起来更接近开头(
而不是结尾)
,那么不情愿的*?
可能会产生明显的不同。但总的来说,我认为将[^]*
的两个实例都更改为[^()]*
将在性能方面做得更好,因为这将导致在不可能匹配时更快失败。
/\([^)]*pronounced[^)]*\)/