我有一长串字符,在这个字符串中,某些位置可能会在括号之间显示不同的潜在值。
例如,在此字符串中,某个位置有时可能具有2个或更多值,并且括在括号中。 (这是我的测试字符串!):
NVSA(LR)TFRVLRA(LK)TISVIPGLKTI(VG)ALIQSVKKLS(DV)MIL(TVFC)LSVFALI...
现在我想通过考虑显示的潜在值来搜索上面这个大字符串中的一些特定子字符串。
示例:
我的测试字符串就是这样开始的:NVSA(LR)TFRVLRA(LK)TISV
。
我想知道在此字符串中是否可以找到NVSARTF
和LRAKTI
(应该返回匹配项)。
同样不应找到NVSAQTF
。
如何编写正则表达式?
答案 0 :(得分:1)
如果您在圆括号( )
中有可能的值,则只需使用方括号[ ]
,就可以使用正则表达式...
正则表达式NVSA[LR]TF
会找到NVSALTF
或NVSARTF
修改强>
在下面总结你的评论你的意思是这样的...
此正则表达式将找到NVSALTF
(?:N|\([^)]*N[^)]*\))(?:V|\([^)]*V[^)]*\))(?:S|\([^)]*S[^)]*\))(?:A|\([^)]*A[^)]*\))(?:L|\([^)]*L[^)]*\))(?:T|\([^)]*T[^)]*\))(?:F|\([^)]*F[^)]*\))
您可以使用该正则表达式模式X
替换您搜索的字符串中的每个字符(例如(?:X|\([^)]*X[^)]*\))
)并连接一个巨大的正则表达式...
测试Regexp here
也许Regex不是解决此类问题的正确方法......
答案 1 :(得分:0)
我认为我们差不多了但还没有。在示例中,如果我将您的字符串更改为:
(?:L|\([^)]*L[^)]*\))(?:R|\([^)]*R[^)]*\))
仍然给予
NVSA(LR)TFRVLRA(LK)TISVIPGLKTI(VG)ALIQSVKKLS(DV)MIL(TVFC)LSVFALI
它会捕获LR
和VLRA
中的(LR)
,
但第二种方式,必须是L
或R
,而不是LR
序列。