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

本文关键字:句子 正则表达式 | 更新日期: 2023-09-27 18:33:21

C# .净4.5

我有以下正则表达式

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

这应该做的是匹配一个句子,其中句子中的单词可能在单词的开头有一个大写字母,但在第一个字母之后没有,并且它可能在句子中的任何位置都有一个点(.)。

表达式词具有以下内容

  • 这行得通
  • Th.is 沃克斯

但是如果点在单词的末尾,则不起作用

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

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

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

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

'b匹配单词边界,则在此之后没有句点,因此不会在单词末尾获得句号。


这似乎更接近:

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

我添加了一个或表示单词边界和空格'b|'s,并在其中放置了一个句点。

它匹配您的所有 4 条样品线。

这似乎更干净:

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

(示例)

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

为什么不保持简单,只是强制[A-Z]只能存在于空白
处边界。(为简洁起见,'s替换为'h

^'h*(?:(?<!'S)[A-Z]|['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 后,模式将在单词中间带有大写字母的单词上匹配