在reg ex python中的\s匹配中转义\n

在reg ex python中的\s匹配中转义\n,python,regex,Python,Regex,我想用“替换所有空格字符(除了\n)。我尝试将正则表达式与\s+一起使用,但它也与换行符匹配 在正则表达式中的\s中是否有跳过\n的方法?\s匹配[\r\n\t\f],如果只需要空格,可以使用以下选项: >>> re.sub(' ', '', 'test string\nwith new line') 由于'匹配一个空格(字面意思),这将删除所有空格,但保留\n字符。\s匹配[\r\n\t\f],如果只需要空格,可以使用以下选项: >>> re.sub

我想用
替换所有空格字符(除了
\n
)。我尝试将正则表达式与
\s+
一起使用,但它也与换行符匹配


在正则表达式中的
\s
中是否有跳过
\n
的方法?

\s
匹配
[\r\n\t\f]
,如果只需要空格,可以使用以下选项:

>>> re.sub(' ', '', 'test   string\nwith  new line')

由于
'
匹配一个空格(字面意思),这将删除所有空格,但保留
\n
字符。

\s
匹配
[\r\n\t\f]
,如果只需要空格,可以使用以下选项:

>>> re.sub(' ', '', 'test   string\nwith  new line')
由于
'
匹配空格(字面意思),这将删除所有空格,但保留
\n
字符

在正则表达式的
\s
中是否有跳过
\n
的方法

您可以使用负前瞻

re.sub(r'(?!\n)\s', '', s)
re.sub(r'(?!\n|\r)\s', '', s)
如果您还想跳过回车,则在负向前看中添加
\r

re.sub(r'(?!\n)\s', '', s)
re.sub(r'(?!\n|\r)\s', '', s)
这就像一种减法。也就是说,上面的正则表达式将从
\s
中减去
\n
\r

在正则表达式的
\s
中是否有跳过
\n
的方法

您可以使用负前瞻

re.sub(r'(?!\n)\s', '', s)
re.sub(r'(?!\n|\r)\s', '', s)
如果您还想跳过回车,则在负向前看中添加
\r

re.sub(r'(?!\n)\s', '', s)
re.sub(r'(?!\n|\r)\s', '', s)

这就像一种减法。也就是说,上面的正则表达式将从
\s
中减去
\n
\r
。因此,您只需将“\s+”替换为[\t\r\f\v]+,即可跳过\n.

。因此,您只需将“\s+”替换为[\t\r\f\v]+,即可跳过\n.

如果您不必考虑Unicode,可以使用

[ \t\r\f\v]
或者,由于
\v
与VT(verical符号,
\x0b
)匹配,
\r
也被视为换行符,
\f
也是一种垂直空白(尽管现在已经过时了-(表单提要,
\x0c
):

见:

\s

如果未指定
UNICODE
标志,它将匹配任何空白字符,这相当于设置
[\t\n\r\f\v]
LOCALE
标志对空间的匹配没有额外影响。如果设置了
UNICODE
,这将匹配字符
[\t\n\r\f\v]
加上Unicode字符属性数据库中归类为空格的内容

如果需要支持所有Unicode空格,请使用

\s(?<!\n)

如果需要排除所有换行符,请添加
\r
\v
,等等。
[^\S\n]
匹配非空白(=匹配任何空白)和换行字符以外的任何字符。

如果不必考虑Unicode,可以使用

[ \t\r\f\v]
或者,由于
\v
与VT(verical符号,
\x0b
)匹配,
\r
也被视为换行符,
\f
也是一种垂直空白(尽管现在已经过时了-(表单提要,
\x0c
):

见:

\s

如果未指定
UNICODE
标志,它将匹配任何空白字符,这相当于设置
[\t\n\r\f\v]
LOCALE
标志对空间的匹配没有额外影响。如果设置了
UNICODE
,这将匹配字符
[\t\n\r\f\v]
加上Unicode字符属性数据库中归类为空格的内容

如果需要支持所有Unicode空格,请使用

\s(?<!\n)

如果需要排除所有换行符,请添加
\r
\v
等。
[^\S\n]
匹配非空白(=匹配任何空白)和换行符以外的任何字符。

可以使用否定字符类
[^\S\n]
其中
\S
是所有非空白字符:

re.sub(r'[^\S\n]', '', s)

您可以使用否定字符类
[^\S\n]
,其中
\S
是所有非空白字符:

re.sub(r'[^\S\n]', '', s)

我不这样认为…我不这样认为…我回来是想把这个添加到我的答案中,并看到这个。我仍然会添加它。我回来是想把这个添加到我的答案中,并看到这个。我仍然会添加它。“或者,因为
\v
也可能匹配换行符…”:在Python中不是这样。@Alanmore:whitespace列表中存在
\v
。它表示一个垂直空间。因此,如果排除所有可能的换行符,我建议将其删除。
打印(十六进制(“\v”)
0xb
=垂直制表(VT)
)我同意OP应该排除所有垂直空格(包括
\f
,顺便说一句)。但是你说
\v
匹配换行符,这不是真的。
\v
匹配垂直制表符,
\n
匹配换行符。但是在替换时,它不适用于多个空格。如何解决这个问题。例如sst=“\n新建一些文本\t heretab\t请参见\n frw\n sdf\n”我希望这样输出“\n新建一些文本\t heretab请参见\n frw\n sdf\n”它应该与
output=re.sub(r'[^\S\n]','',input)
”一起工作,或者,因为
\v
也可能与换行符。。。“:在Python中不是这样。@Alanmore:whitespace列表中有
\v
。它表示一个垂直空间。因此,如果排除所有可能的换行符,我建议将其删除。
打印(十六进制(“\v”)
0xb
=垂直制表(VT)
)我同意OP应该排除所有垂直空格(包括
\f
,顺便说一句)。但是你说
\v
匹配换行符,这不是真的。
\v
匹配垂直制表符,
\n
匹配换行符。但是在替换时,它不适用于多个空格。如何解决这个问题。例如sst=“\n新建一些文本\t此处选项卡\t请参阅\n frw\n sdf\n”我希望这样输出“\n新建一些文本此处选项卡请参阅\n”