C# 正则表达式-不解析句子末尾的点(.)

C# 正则表达式-不解析句子末尾的点(.),c#,regex,C#,Regex,C#.Net4.5 我有下面的正则表达式 ^([0-9A-Z.]?[0-9a-z.]*\b\s*)+$ 这应该做的是匹配一个句子,其中句子中的单词可能在单词的开头有一个大写字母,但不在第一个字母之后,并且可能在句子中的任何地方有一个点(.) 用下列词语表达 这很有效 这是沃克斯 但是如果一个单词的末尾有一个点,它就不起作用了 不起作用 这个。不起作用 如果点(.)在一个单词的末尾,为什么不起作用 如果点(.)在一个单词的末尾,为什么不起作用 \b匹配单词边界,之后没有句点,因此不会在单

C#.Net4.5

我有下面的正则表达式

^([0-9A-Z.]?[0-9a-z.]*\b\s*)+$
这应该做的是匹配一个句子,其中句子中的单词可能在单词的开头有一个大写字母,但不在第一个字母之后,并且可能在句子中的任何地方有一个点(.)

用下列词语表达

  • 这很有效
  • 这是沃克斯
但是如果一个单词的末尾有一个点,它就不起作用了

  • 不起作用
  • 这个。不起作用
如果点(.)在一个单词的末尾,为什么不起作用

如果点(.)在一个单词的末尾,为什么不起作用

\b
匹配单词边界,之后没有句点,因此不会在单词末尾出现句点


这似乎更接近:

^([0-9A-Z.]?[0-9a-z.]*(?:\b|\s)\.*)+$
我为单词边界和空格
\b |\s
添加了or,并在其中加了句点

这是您的全部4条采样线

这似乎更干净:

^([0-9A-Z.]?[0-9a-z.]*\s*)+$

()

您不需要单词边界
\b
,因为字符受到限制
[A-Za-z.\s]

为什么不保持简单,强制执行
[A-Z]
只能存在于空白中
边界。(下面,为了简洁起见,
\s
替换为
\h

^\h*(?:(?)

^#BOS
\h*#可选前导空格
(?:#群集组启动

)谢谢你的帮助。我相信我终于找到答案了

^(\s*[0-9A-Z.]?[0-9a-z.]*\b\s*[.|\s]*)+$

我之所以需要\b是因为我需要在单词中间有大写字母的模式不匹配。当/b被移除时,模式会在单词

中间的单词与单词匹配,因为<代码> \b>代码>。看看你想与<代码> \s/<代码>模式匹配吗?太棒了,谢谢。这个。将在这个上匹配\s(那边的点。)@user1255276我的第一次尝试不太正确,因为我在复制到答案的版本中忘记了避开圆点。我想regexr还可以。@WiktorStribiżew我在regexr和so之间有一个剪切粘贴失败。:-\n是的,我的第一个删除
\b
的建议看起来确实更干净。但是你想发布第一个:)类不需要or运算符,它是隐式的。因此我相信您需要的是
[.\s]
。请注意-单词边界的使用方式是在字符之间匹配一个位置,其中一个单词字符存在于一侧,而另一侧不存在(反之亦然)因此,<代码> \b>代码>可以匹配<代码> AAAA.B.<代码>……这是一个单词边界的定义,描述为正则表达式>(>:(:):(实际上),你试图用一个单词边界来控制一个事实,即在你的有效单词字符的中间不存在一个资本(加上点)。。此左是唯一可以在空白或字符串开头之后存在的位置。这一直被称为空白边界。若要在左侧强制使用它,请使用
(?在右侧使用
(?!\s)。这被描述为一个非空白。使用这种方式,它可以在字符串的开始或结尾以及中间进行匹配。谢谢提示SLN,非常感谢。
^(\s*[0-9A-Z.]?[0-9a-z.]*\b\s*[.|\s]*)+$