重复正则表达式的一部分?

32 投票
2 回答
60275 浏览
提问于 2025-04-17 10:08

我需要处理一个电子表格的文本数据。现在我有一个正则表达式,可以正确解析每一行的数据,但这个表达式有点长。其实就是在匹配一个特定的模式,重复了12或13次。

我想重复的模式是

\s+(\w*\.*\w*);

这是正则表达式(简化版)

^\s+(\w*\.*\w*);\s+(\w*\.*\w*);\s+(\w*\.*\w*);\s+(\w*\.*\w*);\s+(\w*\.*\w*);\s+(\w*\.*\w*);

有没有办法在不复制粘贴的情况下,匹配一个模式固定的次数呢?每个部分对应一个数据列,而我需要所有这些数据。顺便说一下,我是用Python来做的。谢谢!

2 个回答

69

(\s+(\w*\.*\w*);){12}

这里的 {n} 表示“重复 n 次”。

如果你想要“12 到 13 次”,可以写成:

(\s+(\w*\.*\w*);){12,13}

如果你想要“12 次以上”,可以写成:

(\s+(\w*\.*\w*);){12,}

6

你可以试试这个:

[x.group() for x in re.finditer(r'(\s+(\w*\.*\w*);)*', text)]

你找到过 findall 这个方法了吗?或者考虑在 ; 这个符号处分割一下?

map(lambda x: x.strip(), s.split(";"))

这可能正是你 真正 想要的。

撰写回答