我有一个示例文本8 Pair 20+22AWG (7x28) Bare Copper, aDIN PVC DIN
我需要提取特定的关键字AWG,并且DIN考虑到它们之前或之后没有字母
我尝试了这个表达式[^a-zA-Z]+AWG|DIN,但它也提取 20+22了如何将表达式限制为精确的关键字?
我有一个示例文本8 Pair 20+22AWG (7x28) Bare Copper, aDIN PVC DIN
我需要提取特定的关键字AWG,并且DIN考虑到它们之前或之后没有字母
我尝试了这个表达式[^a-zA-Z]+AWG|DIN,但它也提取 20+22了如何将表达式限制为精确的关键字?
您可以使用负前瞻,并且需要通过围绕要提取的值添加分组构造来修复正则表达式:
(?<![a-zA-Z])(?:AWG|DIN)(?![a-zA-Z])
查看正则表达式演示
细节
(?<![a-zA-Z])- 左边不允许有字母(?:AWG|DIN)-AWG或DIN字母序列(?![a-zA-Z])- 右边不允许有字母。您当前正在匹配除 a-zA-Z 之外的 1+ 个字符,然后匹配AWGOR 您仅匹配DIN。
您可以使用捕获组进行区分(AWG|DIN)
如果不支持环视,您可以将捕获组与您的否定字符类一起使用(没有量词+,因为您只需要验证单个字符)。
(?:[^a-zA-Z]|^)(AWG|DIN)(?:[^a-zA-Z]|$)
(?:[^a-zA-Z]|^)匹配除 a-zA-Z 或字符串开头之外的任何字符(AWG|DIN)在第 1 组AWG中捕获或DIN(?:[^a-zA-Z]|$)匹配除 a-zA-Z 或字符串结尾之外的任何字符