如何修改re.compile正则表达式以同时匹配P/N和PN格式的字符串?
解决同时匹配P/N和PN格式的正则表达式问题
没问题,咱们只需要调整正则表达式里的斜杠部分,让它变成可选的就能兼容两种格式了。
原来的正则里P\/N是固定匹配带斜杠的写法,我们把它改成P\/?N——这里的?表示前面的斜杠(\/)可以出现0次或者1次,这样不管是P/N还是PN都能被匹配到。
修改后的完整代码如下:
import re # 调整后的正则表达式,兼容P/N和PN两种格式 USED_ON_PN_PATTERN = re.compile(r'\(USED ON +P\/?N {0,1}([^\)]+)') # 测试带斜杠的情况 text1 = '(USED ON P/N D511835AAB503)' match1 = USED_ON_PN_PATTERN.search(text1) if match1: print(match1.group(1)) # 输出: D511835AAB503 else: print('else') # 测试不带斜杠的情况 text2 = '(USED ON PN D511835AAB503)' match2 = USED_ON_PN_PATTERN.search(text2) if match2: print(match2.group(1)) # 输出: D511835AAB503 else: print('else')
关键修改点说明
- 将原正则中的
P\/N替换为P\/?N:\/?表示斜杠是可选匹配项,既可以匹配带斜杠的P/N,也能匹配不带斜杠的PN - 其余部分保持不变,依然能正确提取括号内
P/N或PN后面的编号内容
这样两种格式的文本都能被正确匹配,并且match.group(1)都会返回你需要的编号D511835AAB503。
内容的提问来源于stack exchange,提问作者Vidya
相关产品推荐
相关产品推荐

