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