gpt4 book ai didi

regex - RegEx正则表达式仅查找和替换整个单词

转载 作者:行者123 更新时间:2023-12-04 17:11:20 28 4
gpt4 key购买 nike

首先,我要说明我正在使用VB6和RegExp

我试图通过“整个单词”查找和替换整个单词,我的意思是有效的匹配不是另一个单词的子字符串,尽管可以使用一些特殊字符。我是正则表达式的新手。这是我正在尝试的:

([^a-z]+)(Foo)([^a-z]+)

看起来很近,但是在某些情况下我遇到了麻烦。

例如,如果我找到字符串
Foo Foo

或者
Foo(Foo)

或以Foo结尾的任何行,而以下一行以Foo结尾的行
This is a line with Foo
Foo starts the next line

在任何这些情况下,仅第一个Foo被匹配。

好吧,也许这不是比赛的问题,而是我的替换方法。我不知道该如何验证。我正在使用组来替换表达式匹配的任何边界char,如下所示:
regEX.Replace(source, "$1" & newstring & "$3")

因此,总而言之,我想避免匹配:
FooBar
酒吧

以下任何一项都是有效的匹配项:

富富
Foo酒吧
Foo_bar
Foo.bar
Foo,酒吧
Foo(酒吧)
富(Foo)

如果有人可以向我展示正确的方法,我将不胜感激!

已编辑

看来我对下面的第一个解决方案讲得太早了。经过一些测试和进一步的阅读之后,我发现下划线是单词char,因此上述模式与之不匹配。我想出了这个办法,有没有更好的办法?
(\b)(Foo)(\b|_)

regEX.Replace(source, "$1" & newstring & "$3")

它有效,但似乎有点草率。

最佳答案

使用“单词边界”表达式\b

也许这样做会很简单:

(.*)\bFoo\b(.*)

仅供引用,单词边界表达式 \b是单词字符 \w和非单词字符 [^\w]之间的零宽度匹配,反之亦然,并且不消耗任何输入。

下划线和数字字符被认为是“单词字符”,因此 Foo_BarBar_FooFoo123不匹配。为了纠正这一点,以便将任何非字母都视为“单词的结尾”(包括输入的开头和结尾),请使用环顾四周:
(?i)(.*(?<![^a-z]))Foo((?![^a-z]).*)

关于regex - RegEx正则表达式仅查找和替换整个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11697483/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com