Python正则表达式需求:提取含多语言字符、数字、撇号的分词
符合需求的正则表达式方案
直接使用以下正则表达式配合Python的re.findall()即可满足你的需求:
import re # 定义正则模式 pattern = r"(?=[^\W_])(?:[^\W_]|')+" # 测试示例1 text1 = "Test, this is a String 123!" print(re.findall(pattern, text1)) # 输出: ['Test', 'this', 'is', 'a', 'String', '123'] # 测试示例2 text2 = "λάκιäsañ" print(re.findall(pattern, text2)) # 输出: ['λάκιäsañ'] # 测试示例3 text3 = "not_underscores" print(re.findall(pattern, text3)) # 输出: ['not', 'underscores']
正则逻辑说明
(?=[^\W_]):正向预检查,确保匹配的内容里至少有一个字母/数字(排除下划线),避免匹配纯撇号的无效内容。(?:[^\W_]|')+:非捕获分组,匹配任意数量的字母/数字([^\W_]等价于不含下划线的\w,支持多语言字符)或撇号,让这些字符可以组合成一个整体。
你之前尝试的正则问题分析
[\w\']+:\w包含下划线,所以下划线会被当成匹配内容的一部分,导致included_Underscores无法分割成两个独立字符串。([^\W_]+(?:\')*):只能匹配字母数字后跟0个或多个撇号,撇号中间的字母数字无法被纳入同一个匹配项,比如don't会被拆成don和t。([\w\'](?<=[^_]))+:\w仍包含下划线,且位置断言逻辑错误,导致单词最后一个字符被错误分离。
内容的提问来源于stack exchange,提问作者Sven Madson
相关产品推荐
相关产品推荐

