在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”