本期的标题已经说明了一切。
如果您能建议正则表达式
,我将非常感激将定冠词“The”或不定冠词“A”或“An”移至标题末尾。
反转名称,例如。约翰·安东尼·史密斯 (John Anthony Smith) 至史密斯 (Smith)、约翰·安东尼 (John Anthony),采用这种格式 姓氏、名字 中间名
提前非常感谢。
对于正则表达式我是一个完全的新手,希望从您提出的解决方案中学习
这里有一些可能的表达方式(尽管肯定还有其他表达方式),以及它们如何工作的解释,以便您可以从中学习。不同语言的语法不同,因此可能存在细微差别。我通常使用正则表达式在 Vim 中进行编辑,所以我使用该语法
s/\(\<.*\>\) \(\<.*\>*\) \(\<.*\>\)/\3, \1 \2/
我们使用
\(\)
指定用于反向引用的捕获组。它们从左到右编号以供替换。
句点
.
表示‘任意字符, and
*means 'repeat this 0 or more times'. It may be better to use a
+`,表示‘一次或多次’
\< \>
标记单词边界。我用它来捕获多个中间名。我们用 \<.*\>*
表示“0 个或多个包含 0 个或多个字符的单词”,然后将其放入转义括号中 \( \)
捕获它以再次替换。
s/\(The\|An\=\) \(.*\)/\2 \1/
就像在大多数编程语言中一样,我们可以使用管道
|
来表示“或”,我们只需要转义它\|
。
\=
类似于 *
或 \+
。它的意思是“前一个字符 0 或 1 次”。所以表达式为“The
”或“A(n)
”。
然后我们只需使用
\(.*\)
捕获剩余的文本,并用 \2 \1
交换它们的顺序。