正则表达式:匹配直到最后 space 的所有内容而不包括它
RegEx: Match everything up to the last space without including it
我想匹配字符串中直到最后一个 space 的所有内容,但不包括它。举例来说,我想匹配我在 bold:
中输入的字符
RENATA T. GROCHAL
到目前为止我有 ^(.+\s)(.+)
但是,它与最后一个 space 匹配,我不希望它匹配。 RegEx 应该也适用于英语以外的其他语言,就像我的一样。
编辑: 我没有提到第二个捕获组不应该包含 space – 它应该是 GROCHAL
而不是 GROCHAL
前面有一个 space。
编辑 2: 基于两个答案提供的内容,我的新 RegEx 是:^((.+)(?=\s))\s(.+)
用于替换匹配项的 RegEx 是 ,
.它实现了预期的结果:
GROCHAL, RENATa T.
任何改进都是可取的。
使用积极的先行断言:
^(.+)(?=\s)
捕获组 1 将包含匹配项。
^(.+)\s(.+)
替换字符串:
,
更新:
另一个可以折叠两个捕获组之间的额外空间的版本:
我喜欢使用命名捕获组:
rawName = RENATA T. GROCHAL
RegexMatch(rawName, "O)^(?P<firstName>.+)\s(?P<lastName>.+)", match)
MsgBox, % match.lastName ", " match.firstName
我想匹配字符串中直到最后一个 space 的所有内容,但不包括它。举例来说,我想匹配我在 bold:
中输入的字符RENATA T. GROCHAL
到目前为止我有 ^(.+\s)(.+)
但是,它与最后一个 space 匹配,我不希望它匹配。 RegEx 应该也适用于英语以外的其他语言,就像我的一样。
编辑: 我没有提到第二个捕获组不应该包含 space – 它应该是 GROCHAL
而不是 GROCHAL
前面有一个 space。
编辑 2: 基于两个答案提供的内容,我的新 RegEx 是:^((.+)(?=\s))\s(.+)
用于替换匹配项的 RegEx 是 ,
.它实现了预期的结果:
GROCHAL, RENATa T.
任何改进都是可取的。
使用积极的先行断言:
^(.+)(?=\s)
捕获组 1 将包含匹配项。
^(.+)\s(.+)
替换字符串:
,
更新:
另一个可以折叠两个捕获组之间的额外空间的版本:
我喜欢使用命名捕获组:
rawName = RENATA T. GROCHAL
RegexMatch(rawName, "O)^(?P<firstName>.+)\s(?P<lastName>.+)", match)
MsgBox, % match.lastName ", " match.firstName