相同字符的正则表达式,忽略换行和空格?

3
如何在Python中创建一个正则表达式,可以匹配连续相同的字符,无论是否有换行符或空格在其中。相同字符的数量应该是可调整的。
示例(e可以是除了换行符或空格之外的任何字符):
匹配:eee, e e e, e e e 不匹配:ebe, e b e, e e 尝试:
(\S)[\s\n]*\1{2}
(\S)(?:\s|\n)*\1{2} 

只是 e\s*e\s*e - Luatic
语法是(\S)(?:\s*\1){2}\n已经包含在\s中)。 - bobble bubble
2个回答

2
你可以使用这个正则表达式:
\A\s*(\S)(?:\s*\1\s*)+\Z

RegEx演示

正则表达式详细信息:

  • \A:断言字符串的起始位置
  • \s*:匹配0个或多个空格字符
  • (\S):匹配任何非空格字符并捕获在第一组中
  • (?:\s*\1\s*)+:匹配与我们在第一组中捕获的相同值,该值被0个或多个空格字符包围。重复此组1次或更多次
  • \Z:断言字符串的结束位置

1
我已经根据我的需求修改了你的正则表达式。(\S)(?:\s\1\s){2} - Rex
如果你需要最少3次重复,那么应该使用{2} - anubhava

1
你可以匹配
(\S)(?:\1|\s)*\1

演示

正则表达式的意思是,“匹配一个非空白字符 (\S),将其保存到捕获组 1 中 ((\S)),然后匹配零个或多个字符,尽可能多地匹配 (*),每个这样的字符都是捕获组 1 的内容 (\1) 或者(|)一个空白字符 (\s),然后再次匹配捕获组 1 的内容。

请注意,虽然您提到了“换行符或空格”,但我假设您希望包括其他空白字符,例如制表符,并且虽然您说重复的字符“可以是除换行符或空格之外的任何字符”,但我假设您不希望它也是其他空白字符,例如制表符。 ([^ \r\n])(?:\1| |\r|\n)*\1 可以满足您明确说明的要求。

我还假设在字符串中可能会有一个或多个匹配项。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接