如果目标单词不是另一个单词的一部分,则使用正则表达式替换单词

本文关键字:单词 替换 正则表达式 单词不 目标 另一个 如果 一部分 | 更新日期: 2023-09-27 18:37:11

我正在研究一个单词的正则表达式,如果它是一个独立的单词而不是另一个单词的一部分,则要替换它。例如"事物"一词。如果是something,子字符串"thing"应该在那里被忽略,但如果单词"thing"前面有一个特殊字符,如点或括号,我希望它被捕获。此外,如果后面有括号、点或逗号(或任何其他非字母数字字符),我希望捕获该单词。

在字符串中

有些东西是thing,还有一个更thing和更thing的东西

在上面的句子中,我突出显示了要标记为替换的 3 个单词。 我使用了以下正则表达式

'bthing'b

我在 regex101.com 上尝试了上面的句子,并且使用此正则表达式仅突出显示了第一个单词。我知道我的正则表达式不会捕获(thing但我认为它会捕获句子中的最后一个单词,以便至少出现 2 次。

有人可以帮我修改我的正则表达式以捕获上面句子中的所有 3 个出现吗?

如果目标单词不是另一个单词的一部分,则使用正则表达式替换单词

您可能使用的是 javascript 正则表达式,它在找到第一个匹配项后返回。 如果在 regex101.com 的第二个框中添加修饰符g,它将找到所有匹配项。

此站点更适合 C# 正则表达式测试:http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx

如果在 C# 中对此进行编码并使用"Matches"方法,则它应该匹配多次。

Regex regex = new Regex("''bthing''b");
foreach (Match match in regex.Matches(
    "Something is a thing, and one more thingy and (thing and more thing"))
{
    Console.WriteLine(match.Value);
}

alphanum [0-9A-Za-z]的简写是[^'W_]

使用回顾和展望你会得到

(?<![^'W_])thing(?![^'W_])

扩大

 (?<! [^'W_] )       # Not alphanum behind
 thing               # 'thing'
 (?! [^'W_] )        # Not alphanum ahedad

匹配突出显示的文本

有些东西是thing,还有一个东西和(thing和更thing