正则表达式匹配多个字符串之一

Posted

技术标签:

【中文标题】正则表达式匹配多个字符串之一【英文标题】:Regex to match one of multiple strings 【发布时间】:2021-12-27 12:24:29 【问题描述】:

在正则表达式方面需要帮助以匹配以下任一情况:

data.testID=abd.123,
data.newID=abc.123.123,
data.testcaseID=abc.1_2,
data.testid=abc.123,
data.TestCaseID=abc.1.2,

我试过了

m = re.search("data.[test.+|new]?[ID]?=(.+)?[,\]")

【问题讨论】:

[]s 在正则表达式中作为“其中的一个字符。如果你想要组,你必须使用普通括号 - ()。如果你想要一个文字点,你必须转义它. 所以更像r"data\.(test.+|new)(id|ID)=(.+)[,\]" 【参考方案1】:

你可以使用

m = re.search(r"data\.(?:test\w*|new)?(?:ID)?=([^,]+)", text, re.I)

请参阅regex demo。 详情

data\. - data. 字符串(注意转义的.(?:test\w*|new)? - 可选的test + 零个或多个单词字符或new 字符串 (?:ID)? - 可选的 ID 子字符串 = - = 符号 ([^,]+) - 第 1 组:, 以外的一个或多个字符。

见Python demo:

import re
texts = ['data.testID=abd.123,','data.newID=abc.123.123,','data.testcaseID=abc.1_2,','data.testid=abc.123,','data.TestCaseID=abc.1.2,']
rx = re.compile(r'data\.(?:test\w*|new)?(?:ID)?=([^,]+)', re.I)
for text in texts:
    m = rx.search(text)
    if m:
        print(text, '=>', m.group(1))

输出:

data.testID=abd.123, => abd.123
data.newID=abc.123.123, => abc.123.123
data.testcaseID=abc.1_2, => abc.1_2
data.testid=abc.123, => abc.123
data.TestCaseID=abc.1.2, => abc.1.2

【讨论】:

以上是关于正则表达式匹配多个字符串之一的主要内容,如果未能解决你的问题,请参考以下文章

MySql-正则表达式

将多个正则表达式匹配之一分配给变量作为 Perl 单行(取消引用数组?)

正则表达式语法

如何检查字符串是不是匹配数组中的正则表达式之一?

正则表达式匹配两个单词之一

正则表达式语法