我有这样的字符串:
str = "Word word ReplaceThis DONT word word"
我只想替换ReplaceThis
,只有当它没有后跟两个或更多大写字母时(在此示例中为DONT
)。
如何在我的正则表达式中编写一个前瞻来处理它?这是我尝试过的:
str.sub!(/\bReplaceThis\b/i, "NewWord"
答案 0 :(得分:2)
user3188544,这可能是您正在寻找的简单答案:
replace = str.gsub(/ReplaceThis(?!\s?[A-Z]{2})/, 'NewWord')
答案 1 :(得分:0)
您可以使用如下所示的捕获组,而不是前瞻或后方:
another_str = "Please ReplaceThis now"
another_str.gsub(/(ReplaceThis) (?=[A-za-z][^A-Z]{1,})/, 'NewWord \2')
#=> "Please NewWord now"
str = "Word word ReplaceThis DONT word word"
str.gsub(/(ReplaceThis) (?=[A-za-z][^A-Z]{1,})/, 'NewWord \2')
#=> "Word word ReplaceThis DONT word word"
Capture Group与Positive lookahead解决方案结合使用:
str = "Word word ReplaceThis DONT word word"
str.gsub(/(ReplaceThis) (?=[A-za-z][^A-Z]{1,})/, 'NewWord \2')
#=> "Word word ReplaceThis DONT word word"
another_str = "Please ReplaceThis now"
another_str.gsub(/(ReplaceThis) (?=[A-za-z][^A-Z]{1,})/, 'NewWord \2')
#=> "Please NewWord now"
答案 2 :(得分:0)
result = re.sub(r"(?s)\bReplaceThis\b\s+(?![A-Z]{2,})", "newword", subject)
答案 3 :(得分:0)
这种模式使用积极的前瞻:
(ReplaceThis)(?=\s[a-z]{2}+)
<强>代码:强>
replace = searchText.gsub(/(ReplaceThis)(?=\s[a-z]{2}+)/x, "NewWord")
示例:强>