简化 python 中的正则表达式模式

问题描述 投票:0回答:3

我正在尝试简化以下正则表达式模式:

r"^(?P<keyword>([A-Z]+-[A-Z]+)|[A-Z]+) "

匹配以下任何一项:

KARIM-KARIM
KARIM

这个正则表达式按预期工作,但我正在尝试简化它。

python regex
3个回答
1
投票
[A-Z]+(-[A-Z]+)?

匹配这种形式的任何字符:

字-字

WORDWORD

所以正则表达式现在看起来像这样:

r"^(?P<keyword>([A-Z]+(-[A-Z]+)?) "

0
投票

我会将您的正则表达式表述为:

^(?P<keyword>[A-Z]+(?:-[A-Z]+)?)

这个模式说匹配:

  • ^
    从图案开始
  • (?P<keyword>
    打开命名捕获组
    • [A-Z]+
      匹配大写字母词项
    • (?:-[A-Z]+)?
      然后匹配连字符和另一个大写术语,0 或 1 次
  • )
    关闭命名捕获组

0
投票

您可以通过删除不必要的捕获组并使用 ?量词表示 - 和后面的 [A-Z]+ 是可选的:

r"^(?P<keyword>[A-Z]+(-[A-Z]+)?) "

此正则表达式模式仍会匹配相同的字符串:

  • 卡里姆-卡里姆
  • 卡里姆

?量词使前面的表达式 (-[A-Z]+) 可选,这意味着它可以出现 0 次或 1 次。这允许正则表达式匹配带和不带连字符和以下大写字母的两种模式。

© www.soinside.com 2019 - 2024. All rights reserved.