我有一组句子都以名字开头,比如
Humpty Dumpty倒下了 Mini Miny Moe去了密西西比州的Meadville Little Piglet是一个尖叫声。
如何从句子中轻松取出名称?
正则表达式/([A-Z])\w+/g
会为我提供大写的所有字词,但我不想在Meadville
和Mississippi
上点击。
因此,对于给定的示例,我想要以下输出:
"Humpty Dumpty", " fell down."
"Mini Miny Moe", " went to Meadville, Mississippi."
"Little Piglet", " is a squealer."
我需要将名称作为一个字符串,其余作为另一个字符串。如果它是两个字符串的数组或具有两个属性的对象 - 我不在乎,只要我将它们分开。
建议?
答案 0 :(得分:4)
这应该这样做
/^([A-Z][a-z]* )+/
它将匹配:
Humpty Dumpty fell down. --> Humpty Dumpty
Mini Miny Moe went to Meadville, Mississippi. --> Mini Miny Moe
Little Piglet is a squealer. --> Little Piglet
修改强>
要像你放置的例子那样捕捉:
/^((?:[A-Z][a-z]* )+)(.*)/
它会给你几乎你想要的东西,不应该硬删除尾随空格或在你需要的地方添加空格:
Humpty Dumpty fell down. --> "Humpty Dumpty ", "fell down."
Mini Miny Moe went to Meadville, Mississippi. --> "Mini Miny Moe ", "went to Meadville, Mississippi."
Little Piglet is a squealer. --> "Little Piglet ", "is a squealer."
编辑2:
根据评论提供建议,因此您无需在创建群组后处理添加/删除空格:
/^([A-Z][a-z]*(?:\s+[A-Z][a-z]*)*)(.*)/
如果您需要RenéDescartes或 Shane Baker-Oropeza 作为名称:
/^([A-ZÁÉÍÓÚ][a-záéíóú]*(?:(?:\s|-)+[A-ZÁÉÍÓÚ][a-záéíóú]*)*)(.*)/
答案 1 :(得分:0)
您需要扩展业务规则。只是寻找以大写字母开头的单词之间的空格,可以让像Silver Spring,MD这样的城市顺利通过。每个以" New"开头的城镇也会溜走。
我不确定你会怎么做。
此外,如果您与城市数据表进行比较,则会删除与城市名称匹配的人名。例如,你有一位名叫Silver Spring的美国本土医生。如果他包括他的头衔,",MD",则完全匹配。