正则表达式匹配多个字符串之一
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
【讨论】:
以上是关于正则表达式匹配多个字符串之一的主要内容,如果未能解决你的问题,请参考以下文章