Octave - 使用正则表达式查找字符串中的单词

时间:2016-04-24 15:28:27

标签: regex matlab octave

在Octave中,我发现只以空格结尾的单词,或逗号或句点后跟空格。

以下是我的代码:

str = 'Hello, I am kjd#(@*#@m, aa.aa.aa.aa. It was nice meeting you.';
regexp(str, "\[a-zA-Z]+\[,.]?\s+", 'match')

这应该返回单词 HelloIamItwasnicemeetingyou。 但是,它只返回was。我很难搞清楚这一点。

我也尝试过这个答案:https://stackoverflow.com/a/29174222/6213337,但它会返回ans = {}(1x0)

有什么想法吗?感谢。

2 个答案:

答案 0 :(得分:2)

Matlab使用PCRE正则表达式风格,因此,您需要的正则表达式可以简洁紧凑,非常全面:

str = 'Hello, I am kjd#(@*#@m, aa.aa.aa.aa. It was nice meeting you.';
regexp(str, "(?<!\\S)\\p{L}++(?!\\p{P}\\S)", 'match')
print match

请参阅regexIDEONE演示。

正则表达式匹配:

  • (?<!\S) - 检查字符串中当前位置之前是否没有非空格字符,如果没有,请继续匹配....
  • \p{L}++ - 任何1个以上的字母(占有率,不允许回溯,因此,下一次检查只会在最后一个字母匹配后执行一次),而不是......
  • (?!\p{P}\S) - 任何标点符号,然后是非空格((?!...)否定前瞻,如果其子模式匹配到当前位置的右侧,则匹配失败字符串)。

答案 1 :(得分:0)

试试这个

str = 'Hello, I am kjd#(@*#@m, aa.aa.aa.aa. It was nice meeting you.';
regexp(str, "(?:^|\\s+)([a-zA-Z]+)(?=[,.]?(?:$|\\s))", 'matches')