我每行有3个匹配组,我知道后两个的长度。 因此,最后一个是3个字母的代码(A-Z),之前一个是2个字母的代码(A-Z),第一个是长度未知的字符串,其中也包含空格和非拉丁字符。 我的正则表达式可以匹配最后两个组,但只能获取第一个匹配组的最后一个单词:
([\p{L}]*)\s*([A-Z]{2})\s*([A-Z]{3})\s*
以下是这些行:
Afghanistan AF AFG
Åland Islands AX ALA
Albania AL ALB
Algeria DZ DZA
American Samoa AS ASM
British Indian Ocean Territory IO IOT
如果我将第一个匹配的组扩展为也包含空格,那么所有内容都在该组中。
任何帮助都值得赞赏。
答案 0 :(得分:1)
您只会得到最后一个单词,因为字符类与单词之间的空格不匹配。
您可以通过在字符类([\p{L} ]*)
demo
如果只希望单词没有最后一个空格并且2和3个字母的组合始终在末尾,则可以通过删除星号或使用\s+
来使第一个\ s不是可选的:
([\p{L} ]*)\s([A-Z]{2})\s*([A-Z]{3})\s*