Java正则表达式的单词边界

4

我想创建一个正则表达式,可以匹配包含空格和破折号的姓氏,例如:

Smith-Wright
Smith
Smith Wright

但如果你只输入-或空格,它不应该起作用。目前我有一个正则表达式,如 ^[a-zA-Z\s\-]+$ ,但它只检查带有-和空格的单词。如何创建正则表达式,以匹配只含我的分隔符的单词?

2个回答

3
你可以使用这个正则表达式来匹配你想要的名称:
^[a-zA-Z]+(?:[ -][a-zA-Z]+)*$

解释:

  • ^ - 字符串的开头
  • [a-zA-Z]+ - 匹配一个由字母组成的名称,其中包含一个或多个字符
  • (?:[ -][a-zA-Z]+)* - 另外匹配更多的名称部分,只要它是以空格或连字符分隔的即可。
  • $ - 字符串的结尾

Regex Demo


但它不仅匹配“Smith”。我应该添加什么来匹配这个? - Hitrene
如果你只想匹配 Smith,只需将最后一个 + 改为 * 演示,这将使后面的部分变成零个或多个,因此是可选的。 - Pushpesh Kumar Rajwanshi

1
如果我正确理解您的帖子,您想匹配以下内容:
  • "Smith-Wright"
  • "Smith"
  • "Smith Wright"
但不包括以下内容:
  • "-"
  • " "
  • "-Wright"
  • " Wright"
如果是这样的话,您可以使用以下代码:
^[a-zA-Z]+([ -][a-zA-Z]+)*$

你可以将分隔符放在[ -]的位置。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接