我正在尝试编写正则表达式来执行查找和替换操作。假设Java正则表达式语法。以下是我想要找到的例子:
所以,我正在搜索以一个或多个数字开头的字符串,后跟一个“1 + 1”子字符串,后跟0个或更多字符。我有以下正则表达式:
^(\d+)(1\\+1).*
这个正则表达式将成功找到上面的示例,但是,我的目标是在"1+1"
之前用所有内容替换字符串。因此,12341 + 1将变为1234,而12241 + 1R1将变为1224.如果我使用第一个分组表达式$1
来替换模式,我得到错误的结果如下:
有什么想法吗?
答案 0 :(得分:3)
您现有的正则表达式工作正常,只是在\
之前错过了\d
String str = "100001+1R2";
str = str.replaceAll("^(\\d+)(1\\+1).*","$1");
答案 1 :(得分:0)
你的正则表达式看起来很好 - 我没有访问java但是在JavaScript代码..
"12341+1".replace(/(\d+)(1\+1)/g, "$1");
按照您的预期返回1234
。这适用于具有许多“代码”的字符串。
"12341+1 54321+1".replace(/(\d+)(1\+1)/g, "$1");
给出1234 5432
。
答案 2 :(得分:0)
就个人而言,我根本不会使用Regex(就像在图钉上使用锤子一样),我只是从(Pseudocode)创建一个子串
stringName.substring(0, stringName.indexOf("1+1"))
但看起来其他海报已经提到过非贪婪的算子。
在大多数Regex语法中,您可以添加“?”在“+”或“*”之后表示您希望它在模式中移动之前尽可能少地匹配。 (因此:^(\d+?)(1+1)
匹配任意数量的数字,直到找到“1 + 1”,然后,不包括“1 + 1”它继续匹配,而你的原始会看到1并匹配它。
答案 3 :(得分:0)
也许你在代码中写错了。如果要在字符串中对正则表达式^(\d+)(1\+1).*
进行编码,则必须编写类似String regex = "^(\\d+)(1\\+1).*"
的内容。
您的输出是^(\d+)(1+1).*
替换的结果,因为您错过了字符串中的一些反斜杠(例如"^(\\d+)(1\+1).*"
)。