我正在尝试解析 Java 代码文件并更改包含开发人员名称的注释并切换格式。评论的示例如下:
//Code modified by James on 10/28/2014 for report enhancement Start --- C1
//Code modified by Steven on 10/28/2014 to show report enhancement Start --- C1
我希望它们成为:
// Company Name report enhancement Start --- C1
// Company Name show report enhancement Start --- C1
我制作的replaceAll行如下:
String temp = line.replaceAll("//.*([Jj]ames)|([Ss]teven).*(to|for)", "// Company Name");
但是我得到的结果字符串是:
//Code modified by // Company Name report enhancement End --- C57844
我可以将替换字符串更改为仅包含公司名称,但我不明白为什么正则表达式在它是匹配器的一部分时会在开头删除“//代码修改者”。对于为什么会发生这种情况的解释以及关于如何更改我的正则表达式的建议将不胜感激。
最佳答案
问题出在开发者姓名两边的括号上。
管道 (|
) 字符采用左侧部分 //.*([Jj]ames)
并将其与右侧部分([Ss]teven).*(to|for)
。最终你会得到匹配的任何一个部分。
要解决这个问题,您可以按如下方式调整括号:
String temp = line.replaceAll("//.*([Jj]ames|[Ss]teven).*(to|for)", "// Company Name");
这样,OR 管道将被限制为匹配 [Jj]ames
或 [Ss]teven
。
关于Java ReplaceAll 只查找字符串的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27432862/