gpt4 book ai didi

c# - 将 与行尾/行首的空格匹配

转载 作者:行者123 更新时间:2023-11-30 19:28:16 25 4
gpt4 key购买 nike

我不知道如何获得 C# 正则表达式 IsMatch匹配 <keyword>后跟行尾或空格。

我目前有[\s]+keyword[\s]+适用于空格,但不适用于 keyword<end of string><start of string>keyword .

我试过了[\s^]+keyword[\s$]+ , 但这使得它无法与空格匹配,并且在字符串的末尾或开头不起作用。

这是我试过的代码:

string pattern = string.Format("[\\s^]+{0}[\\s$]+",keyword);
if(Regex.IsMatch(Text, pattern, RegexOptions.IgnoreCase))

最佳答案

问题是字符类中的 ^$ 不被视为 anchor ,而是被视为文字字符。您可以简单地使用交替而不是字符类:

string pattern = string.Format(@"(?:\s|^){0}(?:\s|$)",keyword);

请注意,不需要+,因为您只想确定是否有一个空格。你不在乎是否有更多。 ?: 只是一种很好的做法,它会抑制 capturing你在这里不需要。 @ 使字符串成为逐字字符串,您不必在其中两次转义反斜杠。

还有另一种方法,我觉得它稍微简洁一些。您可以使用 lookarounds , 以确保您的关键字左右没有非空格字符(是的,双重否定,想想看)。如果存在空格字符或字符串的一端,则此假设有效:

string pattern = string.Format(@"(?<!\S){0}(?!\S)",keyword);

这完全一样,但效率可能会稍微高一些(不过,您必须对它进行概要分析才能确定 - 如果它很重要的话)。

您还可以将第一个模式(具有非反转逻辑)与(正)环视一起使用:

string pattern = string.Format(@"(?<=\s|^){0}(?=\s|$)",keyword);

但是,这对第一个模式并没有真正的影响,除非您想在一个字符串中找到多个匹配项。

顺便说一句,如果您的关键字可能包含正则表达式元字符(如|$+ 等等),确保首先使用 Regex.Escape 将其转义

关于c# - 将 <keyword> 与行尾/行首的空格匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16213169/

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