【问题标题】:Regexp exact word match正则表达式完全匹配
【发布时间】:2014-08-14 11:17:12
【问题描述】:

我需要匹配行中的单词。例如:

The blue bird is dancing.
Yellow card is drawn
The day is perfect rainy
blue bird is eating

四行在一个文本文件l2

我想匹配蓝鸟、黄牌、日期,并且每次打印一行时,匹配的单词都会在该行之前打印。

y=regexp(l2,('^(?=.*blue bird)|(?=.*day)|(?=.*Yellow card)$'));

这就是它的工作原理吗?我无法得到结果。

sprintf('[%s]',y,l2);

【问题讨论】:

  • 你使用什么语言?
  • MATLAB 我们可以在 MATLAB 中使用 (\bYellow card\b)|(\bday\b) 我认为 \b..\b 可以提取出完全匹配的单词

标签: regex printf match


【解决方案1】:

MATLAB 的正则表达式引擎不使用 \b 作为单词边界锚点 but \< and \>

所以你的正则表达式会变成

y = regexp(l2, '^(?=.*\<(?:blue bird|day|Yellow card)\>).*', 'lineanchors');

假设l2 是一个多行字符串。

【讨论】:

  • 如果我选择打印它,它会给我以下错误 sprintf('[%s][%s]',y,l2) 警告:%s 格式说明符的参数必须是输入 char(字符串)。
  • regexp 返回一个包含匹配项起始位置的数组。您是否阅读了我链接到的文档?如果要返回匹配项,则需要 'match' 选项。但是你仍然会有一个数组,而不是一个字符串,当然。
【解决方案2】:

试试这个正则表达式。

(?:blue bird|yellow card|day)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多