正则表达式:匹配最后一个空格之前的所有内容但不包括它。

4
我想匹配字符串中最后一个空格之前的所有内容,但不包括它。举个例子,在RENATA T. GROCHAL中,我想匹配RENATA T.。目前我有^(.+\s)(.+),但是它会匹配最后一个空格,而我不希望这样。正则表达式应该适用于除英语以外的其他语言。
编辑:我没有提到第二个捕获组不应包含空格 - 它应该是GROCHAL而不是在它前面有一个空格的GROCHAL。
编辑2:基于两个答案提供的内容,我的新正则表达式为^((.+)(?=\s))\s(.+),用于替换匹配的正则表达式是\3,\1。它实现了预期的结果。
GROCHAL, RENATa T.

希望能有所改进。


1
如何匹配 $ 结尾前的 \S+ 非空白字符:(.+)\s(\S+)$,并用 $2, $1 进行替换,类似 @medvedev1088 的解决方案,使用两个组 ^(.+)\s(.+) - bobble bubble
@bobblebubble,对我来说,你的解决方案比我的好多了。 - menteith
1
我投票支持medvedev1088的解决方案,因为我的想法非常相似。 - bobble bubble
@bobblebubble 谢谢。我也在我的回复中加入了你的想法。 - medvedev1088
3个回答

6

使用正向先行断言:

^(.+)(?=\s)

捕获组1将包含匹配结果。

5

^(.+)\s(.+)

替换为:

\2, \1

更新:

另一个版本可以合并两个捕获组之间的额外空格:

^(.+?)\s+(\S+)$


2
他更愿意解释为什么他必须尝试它,以及为什么它可能解决他的问题。 - Muhammed Refaat

-1

我喜欢使用命名捕获组:

rawName = RENATA T. GROCHAL
RegexMatch(rawName, "O)^(?P<firstName>.+)\s(?P<lastName>.+)", match)
MsgBox, % match.lastName ", " match.firstName

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