首页 > 解决方案 > 正则表达式检查“=”或“|” 存在于 (?<=P_MFG_PART_NUM\=) 和 (?=\|P|$) 之间

问题描述

我正在努力确定一个字符串是否包含“=”或“|” 在分隔符 (?<=P_MFG_PART_NUM\=) 和 (?=\|P|$) 之间。

我可以使用这个 (?<=P_MFG_PART_NUM\=)(.*?)(?=\|P|$) 匹配所有字符。不确定如何检查内部字符串是否只有“=”或“|”。

一个典型的字符串如下所示,我正在尝试识别 = 或 |。匹配字符串的开头应该是“P_MFG_PART_NUM=”,结尾可以是“|P”或行尾

X_MFG_PART_NUM=|X_MANUFACTURER_ID=|X_ORGANIZATION_ID=|X_INVENTORY_ITEM_ID=|X_RETURN_STATUS=验证失败|P_MFG_PART_NUM=十六进制,1/2-13 X 4 IN THD = NC TP316-SS,ASTM A312 |Psdfsdfs

正则表达式将在 .net 中执行。

对此的任何帮助都将受到高度赞赏。

谢谢

标签: .netregex

解决方案


您可能首先使用缓和的贪婪令牌方法匹配所有没有后跟|P或字符串结尾的字符$(?:(?!\|P|$).)*

然后匹配一个|不跟一个P或匹配一个等号(?:\|(?!P)|=)

(?<=P_MFG_PART_NUM=)(?:(?!\|P|$).)*(?:\|(?!P)|=).*?(?=\|P|$)

在零件

  • (?<=P_MFG_PART_NUM=)断言左边是 `P_MFG_PART_NUM=
  • (?:非捕获组
    • (?!\|P|$).如果右边不是|P字符串或字符串结尾,则匹配任何字符
  • )*关闭组并重复 0+ 次
  • (?:非捕获组
    • \|(?!P)|=匹配|不跟随P或匹配=
  • )关闭组
  • .*?(?=\|P|$)尽可能少地匹配并|P在右侧断言或字符串结尾

.NET 正则表达式演示


推荐阅读