一个正则表达式适用于多个字符串

2024-06-25 23:34:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有4种不同类型的输入:

  • 苹果数>;=18个橙子
  • 苹果数>;=18岁
  • 苹果>;=18个橙子
  • 苹果

我需要提取组作为

{group1} OF {group2} AS {group 3}
 where,
 group1 = 'COUNT'
 group2 = 'apples >= 18'
 group3 = 'apples'    

对于第一个输入,我可以使用以下正则表达式

`/(.*) OF (.*) AS (.*)/g`.

我是否必须使用单独的正则表达式来处理所有这些输入,还是一个正则表达式来处理所有这些输入


Tags: ofgt苹果类型ascountgroupwhere
1条回答
网友
1楼 · 发布于 2024-06-25 23:34:15

您可以使具有OFAS可选的部件,如:

 /^(?:(.*?) OF )?(.*?)(?:AS (.*))?$/

正如您在regex101上看到的,我们因此捕获了三个组:OF之前的部分、中间部分和AS之后的部分

regex101引擎还显示捕获:

Match 1
Full match    0-32    `COUNT OF apples >= 18 AS oranges`
Group 1.  n/a `COUNT`
Group 2.  n/a `apples >= 18 `
Group 3.  n/a `oranges`
Match 2
Full match    33-54   `COUNT OF apples >= 18`
Group 1.  n/a `COUNT`
Group 2.  n/a `apples >= 18`
Match 3
Full match    55-78   `apples >= 18 AS oranges`
Group 2.  n/a `apples >= 18 `
Group 3.  n/a `oranges`
Match 4
Full match    79-85   `apples`
Group 2.  n/a `apples`

因此,我们使用(..)?部分使某些元素成为可选的,并使用.*?进行非贪婪捕获

但是请注意,如果表达式包含多个OFAS,则解析器将第一个OF作为分隔符,第一个AS作为分隔符。所以COUNT OF apples >= 18 OF lemon < 12 AS bar AS qux将在[COUNT] OF [apples >= 18 OF lemon < 12] AS [bar AS qux]中被分离

相关问题 更多 >