Python 正则表达式:捕获一个字符,但不能捕获更多字符

Python 正则表达式:捕获一个字符,但不能捕获更多字符,python,python-3.x,regex,Python,Python 3.x,Regex,我试图在一个字符串中找到一个regexp,它捕获所有包含一个且仅包含一个\n和任意数量的(空格)的实例,该字符串可能还包含多个\n的实例。因此,例如(用表示的空格): (在Windows10上的pyton3中使用re) 我试图在一个字符串中找到一个regexp,它捕获所有包含一个且仅包含一个\n和任意数量的(空格)的实例,该字符串可能还包含多个\n的实例。因此,例如(用表示的空格): (在Windows10上的pyton3中使用re) 编辑以澄清上下文:我正在解析网页的文本,我有一个字符串中的

我试图在一个字符串中找到一个regexp,它捕获所有包含一个且仅包含一个
\n
和任意数量的
(空格)的实例,该字符串可能还包含多个
\n
的实例。因此,例如(用
表示的空格)

(在
Windows10
上的
pyton3
中使用
re
) 我试图在一个字符串中找到一个regexp,它捕获所有包含一个且仅包含一个
\n
和任意数量的
(空格)的实例,该字符串可能还包含多个
\n
的实例。因此,例如(用
表示的空格)

(在
Windows10
上的
pyton3
中使用
re


编辑以澄清上下文:我正在解析网页的文本,我有一个字符串中的文本块,如下所示:

一句话。逐字逐句\nWord。一句话\n\n\nWord\nWord。一句话

在代码的后续步骤中,我将使用一个函数,该函数将删除任何
\n
,因此我希望在使用此函数之前检测它们的位置,以便保留它们(通过使用不会消失的特殊字符临时替换它们)。但正如你所看到的,我有两个案例:

1) 多个
\n
表示段落中断,但我无法确定它们之间是否没有空格或制表符。我想捕捉它们,用一个特殊的字符(例如
§
)替换它们,稍后它会让我知道将多个
\n
放回何处。重要的是我知道有2个或更多的
\n
,而不是有多少。目前,我正在使用这个(但请告诉我是否有bug):

2) 单个
\n
表示段落内的换行符。这些是我想要挑出的,而不是抓住前面案例的例子。同样,要用一个特殊字符(比如
|
)来替换它们,以便以后再放回去:

text = re.sub(r"   the_regex_I'm_looking_for      ", "|", text) 
(我知道我可以做第一次替换,然后搜索剩余的
\n
,但由于与此处基本无关的原因,我无法解释。)

第二次编辑:例如,在这种情况下,期望的结果是:

一句话。逐字逐句|单词。一句话$Word|单词。一句话


(我宁愿在
§
|
前后没有空格,但是这里我不得不把它们放在堆栈溢出的粗体格式中,如果没有,我会得到类似**$**的东西。)

下面的模式适合你吗

import regex as re
StrVal = r'Word word word. Word word word word word. \n Word word word word word word. Word word word word. \n\n \nWord word word word word. \nWord word word. Word word word.'
StrVal = re.sub(r'(?<!\\n\s*)\s*\\n\s*(?!\s*\\n)', '|', StrVal)
print(StrVal)

因此,我引用了module,而不是
re
模块,以便在负回溯中使用非固定宽度量词,这是
re
不允许的。因此,像
\n\n\n\n
这样的模式也不会被替换。

检查此演示是否适合您。我使用了空格而不是“u”


注意:我使用了“^\s*\n\s*”,但它不起作用,因为\s相当于[\t\n\r\f\v]。所以我使用了空格“”字符

我正在尝试,但到目前为止它似乎工作正常,谢谢!老天爷的正则表达式很复杂。。。
text = re.sub(r"[ \t]*(?:\n[ \t]*){2,}", "$", text)
text = re.sub(r"   the_regex_I'm_looking_for      ", "|", text) 
import regex as re
StrVal = r'Word word word. Word word word word word. \n Word word word word word word. Word word word word. \n\n \nWord word word word word. \nWord word word. Word word word.'
StrVal = re.sub(r'(?<!\\n\s*)\s*\\n\s*(?!\s*\\n)', '|', StrVal)
print(StrVal)
Word word word. Word word word word word.|Word word word word word word. Word word word word. \n\n \nWord word word word word.|Word word word. Word word word.
import re
pattern = '^ *\n *$'
test_string = "\n\n "
result = re.findall(pattern, test_string)
print(result)