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的话
Hello
、I
、am
、It
、was
、nice
、meeting
、you
。
然而,它只有 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
正则表达式匹配:
(?<!\S)
- 检查字符串中当前位置之前是否有非空白字符,如果没有则继续匹配....
\p{L}++
- 任何 1+ 个字母(当然,不允许回溯,因此,下一次检查只会在最后一个字母匹配后执行一次)后面没有...
(?!\p{P}\S)
- 任何标点符号,然后是非空格((?!...)
是一个 负先行 ,如果其子模式与右侧匹配则匹配失败字符串中的当前位置)。
在 Octave 中,我发现单词仅以空格结尾,或者以逗号或句号结尾,后跟空格。
以下是我的代码:
str = 'Hello, I am kjd#(@*#@m, aa.aa.aa.aa. It was nice meeting you.';
regexp(str, "\[a-zA-Z]+\[,.]?\s+", 'match')
这应该return的话
Hello
、I
、am
、It
、was
、nice
、meeting
、you
。
然而,它只有 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
正则表达式匹配:
(?<!\S)
- 检查字符串中当前位置之前是否有非空白字符,如果没有则继续匹配....\p{L}++
- 任何 1+ 个字母(当然,不允许回溯,因此,下一次检查只会在最后一个字母匹配后执行一次)后面没有...(?!\p{P}\S)
- 任何标点符号,然后是非空格((?!...)
是一个 负先行 ,如果其子模式与右侧匹配则匹配失败字符串中的当前位置)。