首页 > 解决方案 > 了解 findall() 正则表达式结果

问题描述

我有这个输入:FBBBBFFRRL

前 7 个字符可以是 F 或 B,后 3 个字符是 R 或 L。

我想把它分成2个字符串,所以这就是我所做的:

regex = re.findall('^((F|B){7})', 'FBBBBFFRRL')
print(regex)

我不明白为什么我得到这个:

[('FBBBBFF', 'F')]

第一项是正确的,但为什么我也得到一个 F?

标签: pythonregex

解决方案


的结果findall对应于正则表达式中的括号。较长的结果字符串对应于第一个(外)括号,第二个对应于上次迭代中与内括号匹配的任何内容。

如果您不想这样,请使用非捕获括号(?:F|B)- 或者在您只匹配一组单个字符中的一个的情况下,使用 character class [FB]

您可以利用它来检查您的条件并一次性对字符串进行分区;

matches = re.findall(r'^([BF]{7})([LR]{3})$', your_string)

推荐阅读