正则表达式 1) 将 'The' 或 'A' 或 'And' 移至标题末尾 2) 反转名称,例如 John A. Smith 改为 Smith, John A [关闭]

问题描述 投票:0回答:1

本期的标题已经说明了一切。

如果您能建议正则表达式

,我将非常感激
  1. 将定冠词“The”或不定冠词“A”或“An”移至标题末尾。

  2. 反转名称,例如。约翰·安东尼·史密斯 (John Anthony Smith) 至史密斯 (Smith)、约翰·安东尼 (John Anthony),采用这种格式 姓氏、名字 中间名

    提前非常感谢。

对于正则表达式我是一个完全的新手,希望从您提出的解决方案中学习

regex
1个回答
0
投票

这里有一些可能的表达方式(尽管肯定还有其他表达方式),以及它们如何工作的解释,以便您可以从中学习。不同语言的语法不同,因此可能存在细微差别。我通常使用正则表达式在 Vim 中进行编辑,所以我使用该语法

  1. s/\(\<.*\>\) \(\<.*\>*\) \(\<.*\>\)/\3, \1 \2/

我们使用

\(\)
指定用于反向引用的捕获组。它们从左到右编号以供替换。

句点

.
表示‘任意字符
, and 
*
means 'repeat this 0 or more times'. It may be better to use a
+`,表示‘一次或多次’

\< \>
标记单词边界。我用它来捕获多个中间名。我们用
\<.*\>*
表示“0 个或多个包含 0 个或多个字符的单词”,然后将其放入转义括号中
\( \)
捕获它以再次替换。

  1. s/\(The\|An\=\) \(.*\)/\2 \1/

就像在大多数编程语言中一样,我们可以使用管道

|
来表示“或”,我们只需要转义它
\|

\=
类似于
*
\+
。它的意思是“前一个字符 0 或 1 次”。所以表达式为“
The
”或“
A(n)
”。

然后我们只需使用

\(.*\)
捕获剩余的文本,并用
\2 \1
交换它们的顺序。

© www.soinside.com 2019 - 2024. All rights reserved.