在Octave中,我发现只以空格结尾的单词,或逗号或句点后跟空格。
以下是我的代码:
str = 'Hello, I am kjd#(@*#@m, aa.aa.aa.aa. It was nice meeting you.';
regexp(str, "\[a-zA-Z]+\[,.]?\s+", 'match')
这应该返回单词
Hello
,I
,am
,It
,was
,nice
,meeting
,you
。
但是,它只返回was
。我很难搞清楚这一点。
我也尝试过这个答案:https://stackoverflow.com/a/29174222/6213337,但它会返回ans = {}(1x0)
。
有什么想法吗?感谢。
答案 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
正则表达式匹配:
(?<!\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')