我正在尝试简化以下正则表达式模式:
r"^(?P<keyword>([A-Z]+-[A-Z]+)|[A-Z]+) "
匹配以下任何一项:
KARIM-KARIM
KARIM
这个正则表达式按预期工作,但我正在尝试简化它。
[A-Z]+(-[A-Z]+)?
匹配这种形式的任何字符:
字
字-字
WORDWORD
所以正则表达式现在看起来像这样:
r"^(?P<keyword>([A-Z]+(-[A-Z]+)?) "
我会将您的正则表达式表述为:
^(?P<keyword>[A-Z]+(?:-[A-Z]+)?)
这个模式说匹配:
^
从图案开始(?P<keyword>
打开命名捕获组
[A-Z]+
匹配大写字母词项(?:-[A-Z]+)?
然后匹配连字符和另一个大写术语,0 或 1 次)
关闭命名捕获组您可以通过删除不必要的捕获组并使用 ?量词表示 - 和后面的 [A-Z]+ 是可选的:
r"^(?P<keyword>[A-Z]+(-[A-Z]+)?) "
此正则表达式模式仍会匹配相同的字符串:
?量词使前面的表达式 (-[A-Z]+) 可选,这意味着它可以出现 0 次或 1 次。这允许正则表达式匹配带和不带连字符和以下大写字母的两种模式。