0

我有一个示例文本8 Pair 20+22AWG (7x28) Bare Copper, aDIN PVC DIN

我需要提取特定的关键字AWG,并且DIN考虑到它们之前或之后没有字母

我尝试了这个表达式[^a-zA-Z]+AWG|DIN,但它也提取 20+22了如何将表达式限制为精确的关键字?

4

2 回答 2

1

您可以使用负前瞻,并且需要通过围绕要提取的值添加分组构造来修复正则表达式:

(?<![a-zA-Z])(?:AWG|DIN)(?![a-zA-Z])

查看正则表达式演示

细节

  • (?<![a-zA-Z])- 左边不允许有字母
  • (?:AWG|DIN)-AWGDIN字母序列
  • (?![a-zA-Z])- 右边不允许有字母。
于 2020-07-20T13:29:07.563 回答
1

您当前正在匹配除 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 或字符串结尾之外的任何字符

正则表达式演示

于 2020-07-20T13:53:58.693 回答