使用正则表达式切换多语言子字符串位置
Posted
技术标签:
【中文标题】使用正则表达式切换多语言子字符串位置【英文标题】:Switching multi-language substring positions using regex 【发布时间】:2021-12-16 14:00:32 【问题描述】:带有立陶宛字母的原始输入:
Ą.BČ
Ą.BČ D Ę
Ą. BČ
Ą. BČ D Ę
Ą BČ
Ą BČ D Ę
Examples below should not be affected.
ĄB ČD DĘ
预期结果:
BČ Ą.
BČ Ą. D Ę
BČ Ą.
BČ Ą. D Ę
BČ Ą
BČ Ą D Ę
ĄB ČD DĘ
我尝试过的:
^(.\.? *)([\pL\pN\pM]*)$
With ReplaceAllString substitution like so
$2 $1
我尝试了各种模式,但这是我目前能想到的最好的模式。 它设法捕获第 1、第 3 和第 5 行并成功替换,如下所示: (除了行尾一些多余的空格)
BČ Ą.
Ą.BČ D Ę
BČ Ą.
Ą. BČ D Ę
BČ Ą
Ą BČ D Ę
ĄB ČD DĘ
解释:
有一组数据具有不同的基础基础条目 结构
[FIRST NAME FIRST LETTER][LASTNAME]
理想情况下 带到[LASTNAME][SPACE][FIRST NAME FIRST LETTER][DOT]?
链接到正则表达式101: regex101
最终解决方案:
^([\pL\pN\pM](?:\. *| +))([\pL\pN\pM]+)
With ReplaceAllString substitution like so
$2 $1
【问题讨论】:
【参考方案1】:对于您的示例数据,您可以省略锚点 $
并匹配一个点,后跟可选空格,或者 1 个或多个空格。
为防止字符类出现空匹配,您可以使用+
而不是*
重复1 次或多次
^(.(?:\. *| +))([\pL\pN\pM]+)
查看regex demo
注意 .
可以匹配任何字符,包括空格。您也可以将点更改为单个 [\pL\pN\pM]
【讨论】:
我明白了,所以通过在括号内使用?:
可以匹配表达式但不捕获它。通过省略锚,我仍然可以指定所需的模式必须从第一组开始,对吗?
@papshmeare (?:
确实是一个非捕获组,其中的交替匹配点和可选空格,或 1+ 个空格,因此最后一个示例中的 ĄB
与那里不匹配它们之间应该至少有一个字符。由于您的模式中的锚点$
,您无法匹配Ą.BČ D Ę
,因为由于缺少空格,该模式不会考虑最后两个字符。如果你要添加一个空格,你会匹配太多。见regex101.com/r/ot1wfI/1
不幸的是,在第二组中玩弄那个额外的空间花了我相当多的时间,但现在我很清楚对非捕获组的介绍,我应该多花点时间阅读文档,感谢您的回复!以上是关于使用正则表达式切换多语言子字符串位置的主要内容,如果未能解决你的问题,请参考以下文章