Python中如何编写正则表达式提取特定下划线分隔的单词?
解决方案:符合要求的正则表达式
直接使用以下正则表达式即可提取目标内容:
import re text = "i.am - M_o_h_a_m_m_e_d - and - _1_5_y_o - name - moh_mmed - 2_8_j - i___a_m" result = re.findall(r'(?:[a-zA-Z]|_\d)(?:_+[a-zA-Z0-9])*', text) print(result)
运行后输出与期望一致:
['M_o_h_a_m_m_e_d','_1_5_y_o','i___a_m']
正则规则详解
(?:[a-zA-Z]|_\d):匹配单词的起始部分,二选一:[a-zA-Z]:单个大小写英文字母,对应以字母开头的目标单词(如M_o_h_a_m_m_e_d、i___a_m)_\d:下划线加单个数字,对应数字开头但必须前置下划线的目标单词(如_1_5_y_o)
(?:_+[a-zA-Z0-9])*:匹配后续重复片段:_+:允许一个或多个连续下划线(兼容i___a_m这类多下划线连接的情况)[a-zA-Z0-9]:单个字母或数字,确保非下划线部分都是单个字符*:该片段可重复0次或多次,覆盖单词后续所有合法组合
为什么其他内容不会被匹配
moh_mmed:存在连续字母段(moh、mmed),不符合“非下划线部分为单个字符”的要求2_8_j:数字开头但无前置下划线,不满足起始规则i.am、and、name:要么包含非法字符(.),要么没有下划线分隔,均不匹配规则
内容的提问来源于stack exchange,提问作者Zaky202
相关产品推荐
相关产品推荐

