【发布时间】:2020-05-26 20:24:48
【问题描述】:
我们与我的团队一起使用以下正则表达式模式来描述符合我们需求的大写驼峰式大小写。很简单的一个 - 我们可以在互联网上找到许多类似的。
^[A-Z]+(?:[A-Z]*[A-Za-z0-9]+)*$
我们希望通过向此表达式添加黑名单来改进它。我们可以将这个黑名单条目分为两类:
- 不能在字符串开头的单词(例如“Bool”,因为我们必须使用“Flag”代替它)
- 不能在字符串末尾或中间的单词(例如“Flag”、“Path”、“Url”、“Counter”,因为这些是前缀,它们必须在开头)
当然,我们必须使用黑名单方法而不是白名单,因为可以禁止的单词比允许的要少得多,而且并非所有字符串都必须以前缀开头)
如果有人能帮我将此黑名单实施到我们现有的正则表达式模式中,我将不胜感激。
问候, 托梅克
@编辑: 我认为我没有正确解释我的黑名单想法。我的意思是不应该匹配黑名单中提到的那些表达式-它们应该被自动排除。
@Edit1: 待匹配案例(正确)
FlagDataExist
PathInputFile
UrlLoggingPage
OtherCamelCase
VarValue
IntValue
CounterValue
不匹配大小写(不正确):
-
BoolDataExist(黑名单#1为真) -
InputFilePath(黑名单#2为真) -
LoggingUrlPage(黑名单#2为真) -
otherCamelCase(因为是小驼峰) -
varValue(因为是小驼峰) -
intValue(因为是小驼峰) -
counterValue(因为是小驼峰)
【问题讨论】:
-
必须是正则表达式吗?我并不是说它不能完成(因为它可以),但这将是一个难以维护的巨大混乱。最简单的解决方案是为每个类别创建一个集合,并将您列入黑名单的词添加到集合中,然后遍历集合以查看该词是否符合类别的要求。
-
是的,我们需要正则表达式。我们需要验证这些字符串的工具强制我们使用正则表达式
-
似乎更容易与您当前的模式匹配,然后删除与其他规范冲突的任何匹配项。 regex101.com/r/nUN6rW/1
-
我们需要验证这些字符串的工具强制我们使用正则表达式 - grhh ;)
-
在你的第 1 点你说
Bool你必须使用Flag和 同时 在第 2 点你说 不能在字符串中(例如,Flag...) 什么?