我有表格的字符串 '团队成绩A-ScoreB(##%)'
我正在寻找一个正则表达式或字符串解析方法,它将解析以下所有内容:
基本上:{word / words / words abbreviated} {space} {numbers} {hyphen} {numbers} {space} {(} {numbers} {%} {)}
我得到了/([A-Z])\w+\s\d+-\d+\s\(\d+%\)/g
,到目前为止只会抓住一个字符组成的团队。
这是一个爱好表解析器。我也考虑过将字符串(无论空格意味着多个拆分和连接)分成三个部分并连接,但它似乎效率低下。
答案 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
标志。