我想要提取不与前一个词和后一个词一起开始句子的大写单词。
我正在使用:
(\w*)\b([A-Z][a-z]\w*)\b(\w*)
替换为:
$1 -- $2 -- $3
编辑:它只返回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”这样的匹配?或者你的意图是什么?