繁体   English   中英

正则表达式解析多个单词

[英]Regular expression to parse multiple words

我有“ Team ScoreA-ScoreB(##%)”形式的字符串

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

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

基本上:{单词/单词/单词缩写} {空格} {数字} {连字符} {数字} {空间} {(} {数字} {%} {)}

我有: /([AZ])\\w+\\s\\d+-\\d+\\s\\(\\d+%\\)/g到目前为止,它只能抓住一个只有字符的单词团队。

这是用于爱好表解析器的。 我还考虑过尝试将字符串(但是空格意味着多次拆分和连接)分成三部分并进行串联,但这似乎效率很低。

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

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

正则表达式演示

说明:

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

这是一个演示代码

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标志。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM