我需要将名称与字符串中的数字ID分开,如
先生。约翰史密斯1111
最后的ID是可选的。
因此它应该是2个捕获组 - 一个用于名称,另一个用于数字ID。
我想出了以下regular expression:
/^(?P<name>[^\d]+)(?P<id>(?<= )\d+)?$/
问题是:
name
组?目前我最终得到了空间。[^\d]
替换为.*
组中的name
,则会捕获整个字符串。答案 0 :(得分:4)
您可以使用
^(?P<name>.+?)(?:\s+(?P<id>\d+))?$
请参阅regex demo。
<强>详情
^
- start of string (?P<name>.+?)
- Group&#34; name&#34;除了换行符之外的一个或多个字符尽可能少,因为*?
是lazy quantifier(即此模式首先匹配第一个字符,然后跳过,后续的子模式被尝试,只有当它们失败时,这个子模式才会被扩展&#34;)(?:\s+(?P<id>\d+))?
- 匹配的可选non-capturing group
\s+
- 1+空白字符(?P<id>\d+)
- 小组&#34; id&#34;:1+位数$
- end of string。