在包含Regex潜在字符的大字符串中查找子字符串

时间:2017-03-22 12:34:12

标签: regex string

我有一长串字符,在这个字符串中,某些位置可能会在括号之间显示不同的潜在值。

例如,在此字符串中,某个位置有时可能具有2个或更多值,并且括在括号中。 (这是我的测试字符串!):

NVSA(LR)TFRVLRA(LK)TISVIPGLKTI(VG)ALIQSVKKLS(DV)MIL(TVFC)LSVFALI...

现在我想通过考虑显示的潜在值来搜索上面这个大字符串中的一些特定子字符串。

示例:

我的测试字符串就是这样开始的:NVSA(LR)TFRVLRA(LK)TISV

我想知道在此字符串中是否可以找到NVSARTFLRAKTI(应该返回匹配项)。 同样不应找到NVSAQTF

如何编写正则表达式?

2 个答案:

答案 0 :(得分:1)

如果您在圆括号( )中有可能的值,则只需使用方括号[ ],就可以使用正则表达式...

正则表达式NVSA[LR]TF会找到NVSALTFNVSARTF

修改
在下面总结你的评论你的意思是这样的... 此正则表达式将找到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

它会捕获LRVLRA中的(LR), 但第二种方式,必须是LR,而不是LR序列。