如何仅提取字符串末尾恰好三个连续的大写英文字母?
正则匹配问题:仅提取末尾恰好三个连续大写字母的部分
需求
仅当字符串末尾为恰好三个连续大写英文字母时提取该部分,否则返回"NONE"。
测试用例
a = "aaaAAA" b = "bbbbBBB" c = "ccc CCC" d = "dddddDDD" e = "eeeEEEE"
当前Python函数
import re def get_three(value): search = re.search("[A-Z]{3}$", value) if search: return search.group(0) return "NONE"
当前返回结果
AAA BBB CCC DDD EEE
期望返回结果
AAA BBB CCC DDD NONE
问题原因
原正则[A-Z]{3}$仅匹配末尾的三个大写字母,但无法区分末尾是恰好三个还是更多。比如变量e的末尾是四个大写字母EEEE,原正则会匹配最后三个EEE,导致错误返回。
修正方案
使用负向后行断言(?<![A-Z])确保三个大写字母的前一个字符不是大写字母,这样就能保证末尾是恰好三个连续大写字母。修正后的函数如下:
import re def get_three(value): # 负向后行断言:确保三个大写字母前不是大写字母 search = re.search(r"(?<![A-Z])[A-Z]{3}$", value) if search: return search.group(0) return "NONE"
运行修正后的函数,即可得到符合期望的返回结果。
内容的提问来源于stack exchange,提问作者jatkso
相关产品推荐
相关产品推荐

