如何在Dialogflow中用正则提取3个字母后的5位数字?
Dialogflow 正则表达式提取指定数字方案
- 适用于Dialogflow的正则表达式:
(?<=\w{3}\s*)\d{5} - 原理说明:
Dialogflow的正则匹配逻辑是捕获整个匹配到的字符串,所以需要用正向回顾后发断言来限定匹配范围:(?<=\w{3}\s*)表示匹配位置的前面必须有3个字母数字字符(\w)加上任意数量的空白字符(\s*,包括0个空格)\d{5}匹配后续的5位数字,这部分会被完整捕获,前面的字符不会被包含在结果里
- 优化建议:如果需要严格匹配3个英文字母(排除数字、下划线),可以把
\w替换为[a-zA-Z],正则变为:(?<=[a-zA-Z]{3}\s*)\d{5} - 为什么之前的方案无效:
- 用
\w{3}\s*\d{5}会把前面的3个字符和空格也包含在匹配结果里,Dialogflow会捕获整个串 - 非捕获组
(?:\w{3})只是不单独捕获这部分,但整个匹配结果依然包含前面的字符,所以无法得到单独的5位数字
- 用
内容的提问来源于stack exchange,提问作者Chinh Dang
相关产品推荐
相关产品推荐

