Pallavi H Shinde Ответов: 1

Как выполнить поиск и замену с условием в C# и/или регулярном выражении?


Всем привет. Я прошу об этом для моего редактирования Википедии. Я не из области компьютерных наук, но я много редактирую Википедию.

Я использую программное обеспечение под названием auto wiki browser для редактирования: краткое введение в AWB - Wikipedia[^] AWB-это очень мощный инструмент. Он также поддерживает модули.Википедия:AutoWikiBrowser/Пользовательские Модули - Википедия[^] также регулярное выражение.

Я запускаю задачу поиска и замены с помощью awb. Я хочу добавить некоторые правила для пропуска.
Короче говоря, моя точная проблема: в Википедии есть много страниц, называемых, например, страницей неоднозначности: Роберт Абель - Википедия[^]

На этой странице Роберта Абеля перечислены все люди по имени Роберт Абель и больше ничего. В идеале ни одна вики-страница не должна ссылаться на Роберта Абеля. На страницах должна быть ссылка на конкретного Робертса. Например Роберт Абель (аниматор)[^] или Роберт Абель (футболист).

Вот что я хочу сделать: AWB составляет список всех страниц, ссылающихся на Роберта Абеля (базовая страница). Я хочу найти Роберта Абеля и заменить его Робертом Абелем (аниматором). Но если текст "Роберт Абель (футболист)" или "Роберт Абель (автогонщик)", то я хочу пропустить его.

Что я уже пробовал:

public string ProcessArticle(string ArticleText, string ArticleTitle, int wikiNamespace, out string Summary, out bool Skip)
{
    Skip = false;
    Summary = "test";

    ArticleText = ArticleText.Replace("Robert Abel", "Robert Abel (animator)");

    return ArticleText;
}


Я попробовал приведенный выше код в модуле AWB. Но это добавления "Роберт Абель (аниматор) (animator)", если в статье уже есть "Роберт Абель (аниматор)". Я попытался добавить еще один параметр, но он дал ошибку компиляции. Это ошибочный код:

public string ProcessArticle(string ArticleText, string ArticleTitle, int wikiNamespace, out string Summary, out bool Skip)
{
    Skip = false;
    Summary = "test";

    ArticleText = ArticleText.Replace("Robert Abel", "Robert Abel (animator)");
if ArticleText = "Robert Abel (animator)" {
                    Skip = true;
                } else {
                    ArticleText.Replace("Robert Abel", "Robert Abel (animator)");
                }
    return ArticleText;
}


Я хочу добавить несколько других правил. пример: пропустите, если присутствуют "А", "В" или "с". Если D присутствует, то измените его на E. Если присутствует буква "F", то измените ее на "G".

Пожалуйста, помогите мне.

0x01AA

Для c# if ArticleText = "Robert Abel (animator)" должна стать if (ArticleText == "Robert Abel (animator)")

1 Ответов

Рейтинг:
2

Patrice T

Цитата:
Как выполнить поиск и замену с условием в C# и/или регулярном выражении?

Точное совпадение, которое вы хотите, мне не ясно.
Приведите примеры строк, которые должны совпадать, а которые-нет.
Дайте подробную информацию о правилах.

Всего лишь несколько интересных ссылок, которые помогут построить и отладить регулярное выражение.
Вот ссылка на документацию по регулярным выражениям:
perlre - perldoc.perl.org[^]
Вот ссылки на инструменты, помогающие создавать регулярные выражения и отлаживать их:
.Объем тестер регулярное выражение - регулярное выражение шторм[^]
Регулярное Средство Выражения Эспрессо [^]
RegExr: Learn, Build, & Test RegEx[^]
Онлайн-тестер регулярных выражений и отладчик: PHP, PCRE, Python, Golang и JavaScript[^]
Этот пример показывает вам регулярное выражение в виде красивого графика, который действительно полезен для понимания того, что делает регулярное выражение: Debuggex: онлайн-тестер визуальных регулярных выражений. JavaScript, Python и PCRE.[^]
Этот сайт также показывает регулярное выражение в красивом графике, но не может проверить, что соответствует регулярному выражению: Regexper[^]
[обновление]
Цитата:
спасибо за ответ. Например, я хочу найти голое "Роберт Абель" и заменить его на "Роберт Абель (аниматор)". Я хочу пропустить, если есть "Роберт Абель (аниматор)" или "Роберт Абель (футболист)" или "Роберт Абель (автогонщик)".

Я думаю, вам нужно перефразировать свой поиск на "Роберт Абель", а не на "(".
Попробуйте что-нибудь вроде:
Robert Abel\W(?!\()


Pallavi H Shinde

спасибо за ответ. Например, я хочу найти голое "Роберт Абель" и заменить его на "Роберт Абель (аниматор)". Я хочу пропустить, если есть "Роберт Абель (аниматор)" или "Роберт Абель (футболист)" или "Роберт Абель (автогонщик)".

Pallavi H Shinde

Я добавил код. Пожалуйста, помогите @Patrice T @ppolymorphe

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Покажите новый код и объясните, как он идет не так.

Pallavi H Shinde

Я сделал. В разделе "Что я пробовал".