用于解析多个单词的正则表达式

时间:2016-01-20 23:15:15

标签: python regex string

我有表格的字符串 '团队成绩A-ScoreB(##%)'

我正在寻找一个正则表达式或字符串解析方法,它将解析以下所有内容:

  • TeamA 15-10(30%)
  • A队15-10(45%)
  • Te-am A 30-15(6%)
  • A队10-30(14%)
  • A队15-20(12%)

基本上:{word / words / words abbreviated} {space} {numbers} {hyphen} {numbers} {space} {(} {numbers} {%} {)}

我得到了/([A-Z])\w+\s\d+-\d+\s\(\d+%\)/g,到目前为止只会抓住一个字符组成的团队。

这是一个爱好表解析器。我也考虑过将字符串(无论空格意味着多个拆分和连接)分成三个部分并连接,但它似乎效率低下。

1 个答案:

答案 0 :(得分:1)

要将这些行解析为单个字符串,可以使用

^(.*?)\s*(\d+-\d+)\s*\((\d+%)\)$

请参阅regex demo

说明:

  • ^ - 字符串的开头
  • (.*?) - 组1尽可能少地匹配除换行符之外的零个或多个字符
  • \s* - 零个或多个空格
  • (\d+-\d+) - 第2组一个或多个数字,连字符,一个或多个数字
  • \s* - 同上。
  • \( - 文字开头(
  • (\d+%) - 第3组匹配1个或多个数字+ %符号
  • \) - 文字结束)
  • $ - 字符串结尾

这是demo code

import re
p = re.compile(r'^(.*?)\s*(\d+-\d+)\s*\((\d+%)\)$')
s = "TeamA 15-10 (30%)\nTeam A 15-10 (45%)\nTe-am A 30-15 (6%)\nTeam A's 10-30 (14%)\nTeam A. 15-20 (12%)"
lines = s.split("\n")
for x in lines:
m = p.search(x)
if m:
    print("%s, %s, %s"%(m.group(1),m.group(2),m.group(3)))

re.findall将返回元组列表。如果您有多行字符串输入,请在编译模式时使用re.MULTILINE标志。