如何用正则表达式匹配JSON中pinyin字段值内的单引号字符
正则调整方案
原正则失效原因
你写的正则存在两个核心问题:
- 绝大多数正则引擎(比如JavaScript、Python标准re库、Go正则库等)不支持不定长度的后行断言,原正则中
(?<="pinyin": "\w*)内的\w*长度不固定,会直接触发语法错误或匹配失效 - 原正则用
\w匹配pinyin字段的内容,而\w仅能匹配字母、数字、下划线,无法匹配你示例中bei1后面的空格,导致后视范围根本覆盖不到单引号的前置位置
可用方案
方案1:支持可变长度后行的引擎适用(.NET、Java 9+、Python regex第三方库等)
直接修正后行匹配规则即可,写法如下:
(?<="pinyin": "[^"]*?)'(?!")
说明:
- 用
[^"]*?非贪婪匹配pinyin双引号包裹的字段值中,单引号之前的所有内容,不受字符类型限制 - 后面的
(?!")确保匹配的不是字段末尾双引号前的字符,精准匹配字段中间的单引号
方案2:全引擎兼容写法(无后行断言依赖)
如果用的正则引擎不支持可变长度后行,用捕获组提取目标单引号即可,写法如下:
"pinyin": "[^"]*?(')[^"]*"
匹配后取第1个捕获组的内容,就是你需要的单引号字符。
测试验证
针对你提供的示例字符串"pinyin": "bei1 'ai1",,上述两种方案都可以精准匹配到ai1前面的单引号'。
内容的提问来源于stack exchange,提问作者João Pedro
相关产品推荐
相关产品推荐

