# import re
# import pandas as pd

# 分隔符: (字母数字-) 以外的任何字符串
# 包含: (标点,中文,空格,其他特殊字符), 但不识别\s
# 多个连续分隔符 是一个字符串分隔符(例如多个空格)
# 分割为列表(不分列), 分隔符消失

def myfun(pat: str, string: str):
    lis = re.split(pat, string)
    ser = pd.Series(string).str.split(pat)
    print(lis, ser.tolist()[0])

string = r'12-en中文'
myfun(r"[^a-zA-Z0-9-]+", string)  # 正确
myfun(r"[^\w\d-]+", string)  # 错误: 分隔符不包含中文

string = r'12-en、'
myfun(r"[^a-zA-Z0-9-]+", string)  # 正确
myfun(r"[^\w\d-]+", string)  # 正确: 分隔符包含中文标点

# 原因:
#     \w 与[a-zA-Z0-9_] 区别在于 \w 包含中文 但不包含中文标点
#     \w 等于 [a-zA-Z0-9_] 和中文
#     \w\d 等于 [a-zA-Z0-9] 和中文 不包含下划线

破案!


  • re 与pandas 处理正则表达式
  • re.split 与pandas.Series.str.split(expand=False, regex=True) 效果一致
  • re 与pandas 其他对应功能 应该也是如此


  • \w与 [a-zA-Z0-9_] 的区别


  • \s


#    w 与[a-zA-Z0-9_] 区别在于 w 匹配了unicode字符 包含中文!_字符串