正则表达式不是在句子的开头和两个相邻的单词中拉出大写单词

时间:2010-11-16 21:20:23

标签: regex

我想要提取不与前一个词和后一个词一起开始句子的大写单词。

我正在使用:

(\w*)\b([A-Z][a-z]\w*)\b(\w*)

替换为:

$1 -- $2 -- $3

编辑:它只返回2美元。会尝试建议。

关于自然语言?不要在意这件事。我只是想看看一个句子出现在哪里,所以我可以弄清楚它们是否合适。

2 个答案:

答案 0 :(得分:2)

这个怎么样?

([a-zA-Z]+)\s([A-Z][a-z]*)\s([a-zA-Z]+)

但这并未考虑任何非字母的内容。它还假设所有单词都由单个空格字符分隔。如果您需要更复杂的支持,则需要对其进行修改。

答案 1 :(得分:1)

现在你的正则表达式失败了,因为\b永远不会匹配。它仅匹配字母数字和非字母数字字符;因此,它永远不会在\w*[A-Z]或其他\w*之间匹配。

因此,您的单词之间需要一些其他(=非字母数字)字符:

尝试

(\w*)\W+([A-Z][a-z]\w*)\W+(\w*)

虽然(如果您的正则表达式引擎允许使用Unicode属性),您可能会对

更满意
(\w*)\W+(\p{Lu}\p{Ll}\w*)\W+(\w*)

如上所述,只有长度为2或更长的大写单词匹配,即即“我”(如“我”中)将不会与此匹配。我想你插入[a-z]以避免像“IBM”这样的匹配?或者你的意图是什么?