【问题标题】:How to write REGEXP for multiple groups? (MATLAB)如何为多个组编写 REGEXP? (MATLAB)
【发布时间】:2014-11-30 19:27:00
【问题描述】:

我正在尝试在 MATLAB 中解析文本文档并使用 strsplit 将其拆分为多个部分。每个部分都由如下所示的字符串划分:

483.3731    EXP     New trial (rep=0, index=1): {u'selectPlayer': 1, u'neutralStim4': u'PSYCHOLOGIST', u'neutralStim2': u'PONG', u'neutralStim': u'YEN', u'positiveStim': u'PEACEFUL', u'neutralStim3': u'DASH', u'positiveStim3': u'HAPPY', u'positiveStim2': u'HONORABLE', u'negativeStim': u'BETRAYAL', u'negativeStim4': u'GUNPOINT', u'negativeStim3': u'JEALOUS', u'negativeStim2': u'MISTRUST', u'positiveStim4': u'AWESOME'}

每个部分都包含一个数字变体,后跟“EXP”,然后是“New trial”和一个可变字符串,即 (rep=1, index=1: {u'SelectPlayer': 2, ..)。

我目前有以下代码试图解析这个文档,但我无法让它工作!

expr = '\n\d+\s*EXP\s*New Trial\s*\w+\n';
filecontents = fileread('LAILA_exp1_noCBB_fMRIsync_2014_Oct_28_1239.log');
filecontents = strsplit(filecontents,expr,'DelimiterType','RegularExpression');

我已经尝试了这个正则表达式的多种变体,但我只是不断得到一个包含整个文件作为字符串的单元格数组。谁能指点一下如何为包含多个组的字符串编写正则表达式,例如这个?

谢谢, 阴暗的

【问题讨论】:

    标签: regex matlab strsplit


    【解决方案1】:
    \d+(?:\.\d+)?\s+EXP\s+New\strial\s\([^)]*\):\s+{[^}]+}
    

    您可以使用它来匹配这种字符串。参见演示。

    http://regex101.com/r/hQ9xT1/33

    【讨论】:

    • 你的黑魔法让我非常惊讶!你能解释一下这个表达式的作用:(?:\.\d+)吗?演示非常棒,但我不理解它的解释。
    • @seldamat ?: 只是一个非捕获组。(?:\.\d+)? 用于将小数部分设为可选。因此只有4343.3434 一样匹配。
    • 非常感谢! Regex101 太棒了——你不知道你让我的生活变得多么轻松。
    猜你喜欢
    • 2021-06-28
    • 2014-04-09
    • 1970-01-01
    • 2020-11-11
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多