【问题标题】:Parsing a string pattern - Python解析字符串模式 - Python
【发布时间】:2015-05-19 16:20:41
【问题描述】:

我有一个字符串模式(用于xml 测试报告者),模式如下:

'testsets.testcases.[testset].[testcase]-[date-stamp]'

例如:

a='testsets.testcases.test_different_blob_sizes.TestDifferentBlobSizes-20150430130436'

我知道我总是可以通过以下方式解析 testsettestcase 名称:

temp = a.split("-")[0]
current = temp.split(".")
testset = '.'.join(current[:-1]) + ".py"
testcase = current[-1]

但是,我想使用更 Python 的方式来实现这一点,例如 regex 或任何其他我会在一行中完成的表达式。我怎样才能做到这一点?

【问题讨论】:

  • 你突然开始使用的s和它的name是什么?
  • @MalikBrahimi 抱歉会更新问题
  • @JoelHinz 我不认为它们可能是重复的......我正在寻找一种比那个问题中提出的更普遍的模式

标签: python regex string parsing


【解决方案1】:

你可以试试:

testset, testcase = re.search('(.*)\.(.*)-.*', a).group(1, 2)
testset += '.py'

re.search 在匹配项上返回一个MatchObject,它有一个group 方法,我们可以使用它来提取正则表达式的匹配组(正则表达式中的“()”)。

【讨论】:

  • 这是一个不正确的正则表达式。查看 OP,其中括号表示特定字符​​串中所需的组。
【解决方案2】:

只需使用从正则表达式搜索组中获得的groups

data = re.search(r'.+\..+\.(.+)\.(.+)-(\d+)', string).groups()

【讨论】:

    【解决方案3】:

    如果您严格地想要提取测试集和测试用例,即“test_different_blob_sizes”和“TestDifferentBlobSizes”,就像问题的第一部分一样,您可以这样做:

    testset, testcase = re.split('[.-]',s)[2:4]

    对于基于您所拥有的基于正则表达式的紧凑代码,请参阅 Ziyao Wei 的回复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-24
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      相关资源
      最近更新 更多