正则表达式 []内外的区别
my_ser = pd.Series(['1我是1\r2', '2\n\r2我是\s\r我是2', '3\s\n3\n\s3'])
# 如果元素中出现转义符或中文,则删除转义符或中文并分割,结果如下
my_result = pd.Series([['1', '1'], ['2', '2'], ['3', '3']])
# 我的解决思路是:
pattern = r'[\s]+|[\n]+|[\r]+|[\u4e00-\u9fa5]+'
my_ser.apply(lambda x: re.split(pattern, x))
# 为什么\s无法被消除
pattern = r'[\s\n\r\u4e00-\u9fa5]+'
my_ser.apply(lambda x: re.split(pattern, x))
r'[\s]+|[\n]+|[\r]+|[\u4e00-\u9fa5]+'
与 r'[\s\n\r\u4e00-\u9fa5]+'
之间的区别在于前者会将空白字符(包括空格、制表符、换行符等)以及中文字符都单独匹配并删除,而后者只会匹配连续的空白字符、换行符、回车符和中文字符,并将它们一起删除。
具体来说:
r'[\s]+|[\n]+|[\r]+|[\u4e00-\u9fa5]+'
中的[\s]+
匹配一个或多个连续的空白字符,[\n]+
匹配一个或多个连续的换行符,[\r]+
匹配一个或多个连续的回车符,[\u4e00-\u9fa5]+'
匹配一个或多个连续的中文字符。这意味着它会将这些字符分别删除。r'[\s\n\r\u4e00-\u9fa5]+'
中的[\s\n\r\u4e00-\u9fa5]+'
匹配一个或多个连续的空白字符、换行符、回车符或中文字符,并将它们一起删除。
因此,如果您想要删除所有这些字符,并且不关心它们是连续的还是分散的,可以使用 r'[\s\n\r\u4e00-\u9fa5]+'
,这样可以更简洁地实现目标。如果您想保留连续的空白字符或中文字符之间的间隔,可以使用 r'[\s]+|[\n]+|[\r]+|[\u4e00-\u9fa5]+'
,这将把它们分别删除。