【发布时间】:2022-10-15 14:34:55
【问题描述】:
我正在寻找一个能够捕获字符串中所有单词的正则表达式。
我有以下输入字符串
- 约翰·史密斯先生
- 约翰先生
- J小姐
预期产出
- {“约翰”、“史密斯”、“先生”}
- {“约翰”,“先生”}
- {“J”,“小姐”}
我已经编写了下面的正则表达式,它工作得很好,但它不适用于输入字符串 2 和 3。输入字符串应该只有字母字符(没有数字或特殊字符)。
((?:[a-z]*[a-z]+)).*?((?:[a-z][a-z]+)).*?((?:[a-z][a-z]+))如果输入字符串包含像
JOHN 12345这样的数字,那么正则表达式不应捕获任何内容。你能帮我改进我的正则表达式来捕捉预期的结果吗?
【问题讨论】:
-
你可以匹配
[a-zA-Z ]*,如果它是真的,你在空格上分割 -
每个字符串最多三个单词吗?
-
有时是2个字,有时是3个。字数不一致。
-
这可能会简化为更像
Pattern p = Pattern.compile("([a-z]+).*?([a-z]{2,}).*?([a-z]+)?");的东西(如果你真的想要它们,你可以恢复非捕获但不要冗余双括号)。您正在尝试匹配只有三件事