【问题标题】:Perl regular expression for English word英文单词的 Perl 正则表达式
【发布时间】:2011-01-07 01:45:07
【问题描述】:

我需要一个能够找到任何看起来像英语单词的正则表达式。特别是,我希望表达式在字符串具有以下内容时匹配:

1) 只有字母;和

2) 至少两个不同字母。 (我故意排除一个字母的单词。)

所以我正在寻找匹配 theabracadabra 但不匹配 aaa 的东西。

非常感谢任何帮助。

【问题讨论】:

  • 当然,但是你最后一次在句子中使用它是什么时候?
  • 所以你真正要问的问题是,“什么是正则表达式来匹配任何看起来像英语单词的东西,我可能在过去几年中在一个句子中使用过几次或所以?”这个问题很傻。
  • 从来没有,但现在我知道这个词的存在,我下次玩拼字游戏时完全使用它。
  • @Tomalak:实际上,这个问题非常具体。它是“什么是匹配这两个规则的正则表达式?”下面的答案很有用;你的评论不是。

标签: regex perl words


【解决方案1】:

也许\b(\w*(\w)\w*(?!\2)\w+)\b 适合你。它处理你给出的例子。

它匹配组中的一个字母\w,然后使用反向引用和负前瞻(?!\2) 查找除字母以外的其他内容。我们在最后匹配至少一个字符,这对于使负前瞻强制至少一个不同的字符是必要的。然后我们在周围放置额外的\w* 以允许额外的字母。 \b 确保匹配的结尾在单词边界处。

http://www.rubular.com/r/pwjGi9eLf5

请注意,这不是匹配纯英语单词的超级骗子正则表达式。为此,您想与字典进行比较。但这似乎不是您要在这里做的事情。

【讨论】:

  • 太好了,谢谢。我不知道如何参考上一场比赛来进行负面预测。很有用!为了我的目的,我只需要摆脱那些显然不是文字的东西。我不太担心它是否真的是一个词,所以这很完美。
  • @itzy 看到你没有意识到负面的前瞻匹配(不是让你失望,只是说)并且我正试图成为 perldoc 啦啦队长:我可以建议你查看perldoc perlrequickperldoc perlreref 看看还有什么其他有用的 Perl 正则表达式工具可以帮助你。同样有用的还有:完整的perldoc perlre 和方便的perldoc perlrebackslash
  • 英文单词可能包含破折号、撇号和各种变音符号。对于这种事情,我有一个半标准的酷刑测试句子:“詹姆斯的兄弟问,\x{201C}\x{2019}Tis Ren\x{E9}e\x{2019}s and Noe\x{308} l\x{2019}s great\x{2010}grandparents\x{2019}1970 年代的夏天他摇摇头——然后走开了。”
  • 如何将anti-virusnon-stop字与中间的-匹配?
【解决方案2】:

查看Lingua::EN::Splitter:

use strict; use warnings;
use Lingua::EN::Splitter qw(words);

my @words = words $input_text;
print @words;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-28
    相关资源
    最近更新 更多