首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用正则表达式将字符串分成几组?

用正则表达式将字符串分成几组?
EN

Stack Overflow用户
提问于 2021-06-07 22:10:38
回答 2查看 601关注 0票数 3

我有字符串,可以有不同数量的“组”。我需要把它们分开,但我很难做到。组总是以[A-Z]{2-5}开头,后面是一个:和一个字符串,或者是可变的长度和空格。它将永远有一个空间在前面的小组。

示例字符串:

代码语言:javascript
运行
复制
"YellowSky AA:Hello AB:1234 AC:1F 322 AD:hj21jkhjk23"
"Billy Bob Thorton AA:213231 AB:aaaa AC:ddddd 322 AD:hj2ffs   dsfdsfd1jkhjk23"

到目前为止,我的代码:

代码语言:javascript
运行
复制
import re
D = "Test1 AA:Hello AB:1234 AC:1F 322 AD:hj21jkhjk23"
    
g = re.compile("(?<!^)\s+(?=[A-Z])(?!.\s)").split(D)

如你所见..。这适用于一个单词开始字符串,但不是多个单词。

但这会使/w空间失败:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-07 22:20:12

您可以使用

代码语言:javascript
运行
复制
re.split(r'(?!^)\s+(?=[A-Z]+:)', text)

这个regex演示

详细信息

  • (?!^) -一种负前瞻,与字符串开头的位置不匹配(等于(?<!^),但比字符串短一个字符)
  • \s+ -一个或多个空白空间
  • (?=[A-Z]+:) -一个积极的前瞻性,需要一个或多个大写的ASCII字母与一个:字符紧跟在当前位置的右侧。
票数 2
EN

Stack Overflow用户

发布于 2021-06-07 22:32:31

代码语言:javascript
运行
复制
([A-Z]{2,5}:\w+(?: +\w+)*)(?=(?: +[A-Z]+:|$))

您也可以直接使用re.findall

见演示。

https://regex101.com/r/6jf8EM/1

这样你就不需要过滤不想要的组了,later.You得到了你需要的东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67879236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档