使用正则表达式统计下划线单词后的单词数量
统计下划线开头单词后的单词数量
需求:统计字符串中下划线开头的单词之后出现的单词数量,测试字符串如下:
testString='21 High Street _Earth Mighty Motor Mechanic'
现有问题:原正则(?:\s[a-zA-Z]+)会匹配所有带空格的单词,无法排除下划线单词之前的内容,导致统计结果包含前面的High、Street。
解决方案1:优化正则直接匹配目标单词
修改正则模式,通过正向零宽断言定位到下划线开头单词之后,再匹配后续的单词:
import re testString='21 High Street _Earth Mighty Motor Mechanic' # 匹配下划线单词后的所有字母单词 pattern = r'(?<=_\w+)\s+([a-zA-Z]+)' results = re.findall(pattern, testString) if results: answer = len(results) print(answer) # 输出3
正则说明:
(?<=_\w+):正向零宽断言,确保当前位置前是下划线开头的完整单词(_\w+匹配下划线+至少一个字母/数字)\s+:匹配单词间的一个或多个空格([a-zA-Z]+):捕获目标单词,仅匹配纯字母组成的单词
解决方案2:截取目标段落后拆分单词
如果正则逻辑复杂,也可以先定位下划线单词的位置,截取后续内容后拆分统计:
import re testString='21 High Street _Earth Mighty Motor Mechanic' # 定位下划线开头的单词 match_obj = re.search(r'_\w+', testString) if match_obj: # 截取下划线单词之后的内容并去除首尾空格 target_content = testString[match_obj.end():].strip() # 按空格拆分单词 word_list = target_content.split() answer = len(word_list) print(answer) # 输出3
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

