заменить первый пробел до последнего пробела после запятой только в круглых скобках

В 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 строчные буквы.
  • ) закрыть положительный обзор.

Тем не менее, я борюсь со 2-м шагом. Как заменить первый пробел до последнего пробела после запятой \s.*,\s только в круглых скобках? Я прочитал много сообщений под названием «регулярные выражения только в скобках», но решения, с которыми я столкнулся, не подходили для моего случая.


person Flo    schedule 20.02.2017    source источник
comment
Попробуйте (\(\w+)(?:\s+(\w+))?[^)]*\s(\d+\)) --› $1$2$3.   -  person Wiktor Stribiżew    schedule 20.02.2017
comment
@Виктор отлично! Хотите превратить свой комментарий в ответ?   -  person Flo    schedule 20.02.2017
comment
Да, секундочку пожалуйста   -  person Wiktor Stribiżew    schedule 20.02.2017


Ответы (1)


Вы можете использовать

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

и замените на $1$2$3.

Сведения о шаблоне:

  • (\(\w+) - Группа 1: (, а затем 1+ словесных символов
  • (?:\s+(\w+))? – необязательная незахватывающая группа, соответствующая 1+ пробелам, а затем захватывающая в группу 2 один или несколько символов слова.
  • [^)]* - ноль или более символов, кроме )
  • \s - пробел
  • (\d+\)) - Группа 3: цифры 1+ и ).

введите здесь описание изображения

person Wiktor Stribiżew    schedule 20.02.2017