【问题标题】: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)=(.+)[,\}]"

标签: python regex string-matching


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    • 2014-10-11
    • 1970-01-01
    • 2014-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多