如何在Julia中用正则匹配句子所有单词并排除各类空白字符
问题原因
你当前的正则存在两处错误:
- 字符组中写入的
(^\n$)不会生效:字符组内部的^、$、括号都会被识别为普通字符,无法起到排除换行、锚定行首尾的作用,也没有覆盖\t、空格等其余空白字符的排除规则 - 没有对空白字符做截断处理,导致换行符会和后续的单词被识别为同一个匹配项
解决方案
将正则替换为如下规则即可,修改后的完整代码:
sentence = """"That's the password: 'PASSWORD 123'!", cried the Special Agent.\nSo I fled.""" regex = r"\b[A-Za-z\d]+(?:'[A-Za-z]+)?\b" v = [m.match for m = eachmatch(regex, sentence)]
运行后得到的匹配结果为:["That's", "the", "password", "PASSWORD", "123", "cried", "the", "Special", "Agent", "So", "I", "fled"]
完全符合你的匹配需求。
规则说明
\b为单词边界锚点,会自动在空白、标点和单词字符的分界位置截断,天然排除所有空白字符(包括\n、\t、空格等),不会出现换行和单词连配的问题- 非捕获组
(?:'[A-Za-z]+)?匹配单词中间的撇号,不会匹配到单词首尾的单引号,避免把'PASSWORD的开头引号也识别进结果 - 仅允许字母、数字作为单词组成部分,完全匹配你的原始规则要求
内容的提问来源于stack exchange,提问作者sbac
相关产品推荐
相关产品推荐

