【发布时间】:2022-07-06 22:47:17
【问题描述】:
这里的新手,我一直在尝试学习正则表达式,但有时我觉得我无法理解正则表达式是如何处理字符串的。因为在计划阶段我似乎可以解决它,但在实施过程中它并没有像我预期的那样工作。
这是我的小问题:我的字符串包含一个或多个名称(团队名称)。问题是如果字符串包含多个,则没有分隔符。所有名称都是直接联合的。
一些例子:
------------String ------Contains------------要提取的名称
- 'RangersIslandersDevils' --> 3 个名字 ->>> [Rangers, Islanders, Devils]
- '49ersRaiders' -------------> 2 个名字 ->>> [49ers, Raiders]
- 'Avalanche'----------------> 1 个名字 ->>> [Avalanche]
- '红翼'---------------> 1 个名字 ->>> [红翼]
我想捕获每个字符串中的每个名称,然后在循环中使用它们。但我似乎无法实现我想象的模式。
我脑海中的字符串模式实现是这样的:
- 开始扫描预计以大写字母开头的文本 字母或数字
- 如果您看到文字“s”后跟一个大写字母(如 ...s[A-Z]..),请捕获文本直到“s”(包括 s)
- 重复第二步,直到看不到 (....s[A-Z]..) 模式。并将字符串的其余部分作为姓氏捕获。
- (可选)将所有名称写在一个列表中
好吧,我尝试了一些代码,其中第二步只捕获一个实例,而第三步通常给出另一个实例,但这是徒劳的。
re.findall('([A-Z0-9].*s)*([A-Z].*)+', 'RangersIslandersMolsDevil')
只返回两个名字:
[('RangersIslandersMols', '恶魔')]
而我想要四个:
[游骑兵、岛民、摩尔人、恶魔]
【问题讨论】:
-
用目前的方法让 Red Wings 用一个名字而不是 2 个名字似乎是不可能的
-
特别是如果你得到类似
'Red RangersIslanders'的东西。现在结果应该是“Red Rangers”和“Islanders”这两个字符串吗?
标签: python regex regex-group python-regex