正则表达式 - 不解析句子末尾的点(.)
本文关键字:句子 正则表达式 | 更新日期: 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 后,模式将在单词中间带有大写字母的单词上匹配