首页 > 解决方案 > 如果不是单词的一部分,则 REGEX 查找特定的子字符串

问题描述

我在简化我创建的正则表达式时遇到了麻烦:

@"^sept$|[^a-zA-Z]sept[^a-zA-Z]]|[^a-zA-Z]sept$|^sept[^a-zA-Z]"

该正则表达式必须找到子字符串sept,这不是任何单词的一部分(例如 september ),当应该找到单词时,我会收到几个不同的变体,例如:

九月

9 月 1 日

9月1日

9 月 1 日

九月

... ETC。

在我的模式中,我搜索不是在字母上开始/结束的 sept(所以它不是不同单词的一部分),它可以在字符串的开始/结尾。我检查了功能,它满足了我的需求,但我想知道是否有更好/更简单的方法来编写它。

标签: regex

解决方案


您可以通过对边界条件使用交替来加强这一点:

(^|[^a-zA-Z])sept($|[^a-zA-Z])

但这也可能会匹配 . 的每一侧的一个字符sept。为避免这种情况,您可以使用环视,假设您的正则表达式支持它们:

(?<=^|[^a-zA-Z])sept(?=$|[^a-zA-Z])

推荐阅读