Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么这个使用单词分隔符(\b)的正则表达式与.Net中的示例不匹配?_C#_.net_Regex - Fatal编程技术网

C# 为什么这个使用单词分隔符(\b)的正则表达式与.Net中的示例不匹配?

C# 为什么这个使用单词分隔符(\b)的正则表达式与.Net中的示例不匹配?,c#,.net,regex,C#,.net,Regex,应该足够简单,但这件事不起作用是困惑我,任何洞察为什么是非常感谢。 我正在尝试将缩写词的任何实例与任意数量的尾随“.”、“/”或“-”匹配。请注意,我使用“\b”尝试获取整个“单词”,包括上面提到的尾随字符,但不包括任何后续字符。它还具有与行或字符串结尾匹配的优势。 我使用以下表达式: (?<target>\bLLC[\./\-]+\b) (?<target>\bLLC[\./\-]+)([^a-zA-Z0-9]|$) 我希望表达式选择'LLC',但它没有选择任何

应该足够简单,但这件事不起作用是困惑我,任何洞察为什么是非常感谢。 我正在尝试将缩写词的任何实例与任意数量的尾随“.”、“/”或“-”匹配。请注意,我使用“\b”尝试获取整个“单词”,包括上面提到的尾随字符,但不包括任何后续字符。它还具有与行或字符串结尾匹配的优势。 我使用以下表达式:

(?<target>\bLLC[\./\-]+\b)  
(?<target>\bLLC[\./\-]+)([^a-zA-Z0-9]|$)
我希望表达式选择'LLC',但它没有选择任何匹配项,我不知道为什么。 我已经尝试使用RegexBuddy调试表达式,如果我删除尾随的“\b”,它就会工作,但正如我前面所解释的,这不是我想要的


有人知道为什么这不起作用吗?

没有与最后\b匹配的单词边界

最近的单词边界在LLC之后和East之前,您的模式不允许最后一个\b位于这两个位置中的任何一个。

试试看

(?<target>\bLLC[\./\-]+)\s*\b
正如Guffa指出的那样,这允许在单词边界之前的空格,即空格和E之间的空格,而不将这些空格包含在匹配组目标中


另一方面,匹配后面的单词边界。这对你没什么好处,因为标点符号会导致单词边界,除非后面跟着其他标点符号。

我得到了很好的回答,指出了正确的方向,但没有人真正提出使用“\b”的替代方案,它在目标方面具有相同的效果,并且将匹配分隔符和字符的结尾一串 正如Guffa所指出的,问题是我使用“\b”作为一种方式来选择任何分隔符字符或位于该分隔符之前位置的字符串结尾,而实际上它的作用是它所代表的:一个单词分隔符。由于我的选择器已位于单词外的某个位置,因此它不匹配,因为“.”后面的这个位置既不是单词的开头,也不是单词的结尾,因此整个字符串中没有匹配项,因为匹配仍然需要目标后的“\b”。 我最终决定使用以下表达式:

(?<target>\bLLC[\./\-]+\b)  
(?<target>\bLLC[\./\-]+)([^a-zA-Z0-9]|$)
这将匹配任何非字母数字字符以及字符串的结尾,并将匹配“target”组,而无需任何分隔字符,在产生我最初想要的效果之前或之后。
再次感谢您的回复,希望这将有助于解决类似问题的其他人

很抱歉,但从您的问题中根本没有办法知道这是您要寻找的标准。事实上,根据您使用单词分隔符的决定,看起来你需要字符串结尾或字母数字文本来跟随..回头看,我注意到现在我没有使它足够明确,并且希望人们理解一个不起作用的正则表达式背后的意图,所以我对问题进行了编辑,使其更加明确。话虽如此,Guffa还是意识到我误用了“\b”这个特殊标记。