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

Octave - Finding words in a string using regex

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

以下是我的代码:

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

这应该return的话 HelloIamItwasnicemeetingyou。 然而,它只有 returns was。我很难弄清楚这一点。

我也尝试过这个答案:,但它 returns ans = {}(1x0)

有什么想法吗?谢谢。

试试这个

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

Matlab 使用 PCRE regex flavor,因此,您需要的 regex 模式可以简短紧凑且非常全面:

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

查看 regex and IDEONE 演示。

正则表达式匹配:

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