将逗号后的第一个空格替换为括号后的最后一个空格

时间:2017-02-20 17:42:58

标签: regex regex-lookarounds regex-greedy

在Notepad ++中,我想用引文键替换所有引用/引用。

例如,以下内容:

Bla bla bla bla (van Author et al., 2015). 
Bla bla bla (Authorone, Authortwo, & Authorthree, 2016). 
Bla bla (Authorone & Authortwo, 2017). 

应该成为:

Bla bla bla bla (vanAuthor2015). 
Bla bla bla (Authorone2016). 
Bla bla (Authorone2017). 

请注意,单行中可能还有多个引用,但没有嵌套括号。

在第一步中,我将(?<=\([a-z][a-z][a-z])\s替换为(van Author et al., 2015),无法将第一次引用从(vanAuthor et al., 2015)转换为(von Author et al., 2015)。这也适用于\s

说明:

  • (?<=删除单个空格
  • \([a-z][a-z][a-z])后面的
  • )左括号和3个小写字母。
  • \s.*,\s关闭positive lookbehind

然而,我正在努力迈出第二步。 如何在逗号{{1}} 之后的最后一个空格中仅将第一个空格替换为括号 ?我读了很多标题为&#34;正则表达式只在括号中的帖子&#34;但我遇到的解决方案似乎并不适用于我的情况。

1 个答案:

答案 0 :(得分:1)

您可以使用

(\(\w+)(?:\s+(\w+))?[^)]*\s(\d+\))

并替换为$1$2$3

模式详情

  • (\(\w+) - 第1组:(然后是1 +字的字符
  • (?:\s+(\w+))? - 一个可选的非捕获组,匹配1个以上的空格,然后捕获到第2组中的一个或多个字符
  • [^)]* - 除)
  • 以外的零个或多个字符
  • \s - 空白
  • (\d+\)) - 第3组:1+位数和)

enter image description here