C# 正则表达式找不到字符串的开头
我有以下输入字符串: “温斯洛·荷马·哈珀周刊”“神枪手纠察队职责”“原创” 以下正则表达式:C# 正则表达式找不到字符串的开头,c#,.net,regex,C#,.net,Regex,我有以下输入字符串: “温斯洛·荷马·哈珀周刊”“神枪手纠察队职责”“原创” 以下正则表达式: (?<ModBroadBeg>.+)(?<modBroadWord>(^| )*winslow *)(?<ModBroadEnd>.*) ${ModBroadBeg}+${modBroadWord}${ModBroadEnd} 还有下面的C代码。我想用“+winslow”替换“winslow” 我在中进行了测试,结果很有效。以上代码适用于荷马、哈珀和周报。这让我
(?<ModBroadBeg>.+)(?<modBroadWord>(^| )*winslow *)(?<ModBroadEnd>.*)
${ModBroadBeg}+${modBroadWord}${ModBroadEnd}
还有下面的C代码。我想用“+winslow”替换“winslow”
我在中进行了测试,结果很有效。以上代码适用于荷马、哈珀和周报。这让我相信“winslow”有问题,因为它是字符串的开头。我在VisualStudio中进行了测试,如果我在“winslow”前面放置一个空格,正则表达式就会工作
(?<ModBroadBeg>.+)(?<modBroadWord>(^| )*winslow *)(?<ModBroadEnd>.*)
它使用a来匹配winslow
之前的位置,并将零长度字符串替换为+
(这实际上是在特定点插入内容的一种方式)
如果要匹配foo-winslow-bar
中的“winslow”,但foo-winslow-bar
或foo-winslowbar
中的“winslow”,则可以使用(\b
)匹配单词的开头/结尾,如下所示:
(?=\bwinslow\b)
单词边界用于检测边界一侧的字符是否为空白而另一侧的字符是否为空白。当word以输入的开头或结尾为边界时,它们也可以工作,例如
winslow-foo-bar
和foo-bar-winslow
谢谢JDB。如何仅指定第一个winslow?还是积极的前瞻只能找到第一个?e、 g.:《温斯洛荷马哈珀周刊》《神枪手温斯洛纠察队职责》《原创》。当我使用您的解决方案时,它匹配第二个winslow,而不是第一个。@BriandeTrich我认为C#的正则表达式函数不允许您只替换第一个匹配项。但是,您可以使用该函数查找第一个实例,这将为您提供匹配字符串的开始和长度。您可以使用该信息获取不匹配部分的子字符串,然后将字符串与替换文本重新连接在一起。
(?=winslow)
(?=\bwinslow\b)