Regex, чтобы заменить строку другой строкой в ​​MS Word? - PullRequest
3 голосов
/ 26 мая 2009

Может кто-нибудь помочь мне с регулярным выражением повернуть:

filename_author

до

author_filename

Я использую MS Word 2003 и пытаюсь сделать это с помощью функции поиска и замены в Word. Я попробовал функцию use wildcards, но мне не повезло.

Я только смогу сделать это программно?

Ответы [ 6 ]

14 голосов
/ 26 мая 2009

Вот регулярное выражение:

([^_]*)_(.*)

А вот пример C #:

using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        String test = "filename_author";
        String result = Regex.Replace(test, @"([^_]*)_(.*)", "$2_$1");
    }
}

Вот пример Python:

from re import sub

test = "filename_author";
result = sub('([^_]*)_(.*)', r'\2_\1', test)

Редактировать: Чтобы сделать это в Microsoft Word с использованием подстановочных знаков, используйте это в качестве строки поиска:

(<*>)_(<*>)

и заменить на это:

\2_\1

Кроме того, см. Добавление возможностей поиска Word с помощью регулярных выражений для объяснения синтаксиса, который я использовал выше:

  • Звездочка (*) возвращает весь текст в слове.
  • Символы меньше и больше (<>) отмечают начало и конец каждого слова соответственно. Oни убедитесь, что поиск возвращает одно слово.
  • Скобки и пробел между ними делят слова на отдельные группы: (первое слово) (второе слово). Скобки также указывают порядок, в котором вы хотите найти оцените каждое выражение.
2 голосов
/ 26 мая 2009

Шаблон поиска:

([^_]+)_(.+)

Шаблон замены:

$2_$1
2 голосов
/ 26 мая 2009

Вот, пожалуйста:

s/^([a-zA-Z]+)_([a-zA-Z]+)$/\2_\1/

В зависимости от контекста это может быть немного жадным.

1 голос
/ 26 мая 2009

Поскольку вы находитесь в MS Word, вы можете попробовать не-программный подход. Выделите весь текст, выберите Таблица -> Преобразовать -> Текст в таблицу. Установите количество столбцов в 2. Выберите «Отдельный текст в», выберите радио «Другое» и введите _. Это даст вам стол. Переключите две колонки. Затем преобразуйте таблицу обратно в текст, снова используя _.

Или вы можете скопировать все это в Excel, создать формулу для разделения и объединения текста, а затем скопировать и вставить это обратно в Word. Либо будет работать.

1 голос
/ 26 мая 2009

В .NET вы можете использовать ([^_]+)_([^_]+) в качестве регулярного выражения, а затем $2_$1 в качестве шаблона подстановки для этого очень специфического типа случая. Если вам нужно более двух частей, все становится намного сложнее.

0 голосов
/ 26 мая 2009

В C # вы также можете сделать что-то вроде этого.

string[] parts = "filename_author".Split('_');
return parts[1] + "_" + parts[0];

Вы, конечно, спрашивали о регулярных выражениях, но это может быть хорошей альтернативой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...