繁体   English   中英

RegEx - 不解析句子末尾的点(。)

[英]RegEx - Not parsing dot(.) at the end of a sentence

C#.Net4.5

我有以下regEx表达式

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

这应该做的是匹配一个句子,句子中的单词可能在单词的开头有一个大写但不在第一个单词之后,并且在句子内的任何地方都可以有一个点(。)。

表达词语如下

  • 这个作品
  • Th.is Wo.rks

但是如果点位于单词的末尾则不起作用

  • 不起作用。
  • 这个。 不起作用

如果点(。)位于单词的末尾,为什么这不起作用?

如果点(。)位于单词的末尾,为什么这不起作用?

\\b匹配单词边界,之后没有句号,所以你不会在单词结尾处得到句号。


这似乎更接近:

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

我添加了一个或用于单词边界和空格\\b|\\s并在其中添加了一个句点。

匹配所有4个样本行。

这似乎更清洁:

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

例子

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

为什么不保持简单,只强制[AZ]只能存在于空格上
边界。 (下面, \\s为了简洁而替换为\\h

^\\h*(?:(?<!\\S)[AZ]|[\\da-z.\\h]+)+$

格式化和测试:

 ^                     # BOS
 \h*                   # Optional leading whitespace
 (?:                   # Cluster group start
      (?<! \S )             # Whitespace boundary before capital
      [A-Z]                 # Single capital letter
   |                      # or,
      [\da-z.\h]+           # Multiple digits, lower case letters, dots or whitespace
 )+                    # Cluster group end, do 1 to many times
 $                     # EOS

谢谢您的帮助。 我相信我终于有了答案

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

我需要\\ b的原因是因为我需要模式与单词中间有大写字母的单词不匹配。 当删除/ b时,模式将匹配单词中间带有大写字母的单词

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM