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

Ignoring part of string based on position of underscore

我有一个实验条件列表,看起来像这个table中的左栏:

------------------------------------------------------------------------
| 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)组合在一起的图形。

您可以使用以下表达式:

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

正则表达式演示 here