根据下划线的位置忽略字符串的一部分

时间:2018-09-05 14:16:22

标签: regex matlab regex-negation

我有一个实验条件列表,看起来像此表的左列:

------------------------------------------------------------------------
| Input                                    | Output                    |
------------------------------------------------------------------------
| ID1_sWT_c1_ext_x1                        | sWT                       |
| ID29_s3KO_pNodC_VcCDA_c3_ext_x1          | s3KO_pNodC_VcCDA          |
| ID47_s3KO_pTet_NodC_VcCDA_50ng_c3_ext_x1 | s3KO_pTet_NodC_VcCDA_50ng |
------------------------------------------------------------------------

我想使用正则表达式在右列中获得输出(这是必需的!)。基本上忽略第一个下划线(_)之前(包括下划线)的所有内容,而忽略倒数第二个下划线之后的所有内容(包括下划线)。我自己做了一些尝试,并提出了一种解决方案,将所有内容分为两组,并在第一个下划线之前忽略了此内容:

 (?<=\_).*[A-Za-z0-9_]*(_[^_]*_[^_]*_[^_]*)$

但是,现在我陷入困境,并且想知道是否有人知道一个好的解决方案。

我正在与Matlab合作。我需要用它来将所有生物复制品(分别表示为c1c2c3)组合在一起。

1 个答案:

答案 0 :(得分:1)

您可以使用以下表达式:

(?<=_).*(?=_c\d)
  • (?<=_)落后于_
  • .*匹配任何内容。
  • (?=_c\d)前瞻_c,后跟一个数字。

正则表达式演示here