Регулярное выражение заменяет 2 или более на 2 или более - PullRequest
0 голосов
/ 29 января 2019

Я хочу заменить более одного пробела более чем одним &nbps;, но если только 1, я хочу оставить его как обычный пробел.

Контрольные примеры:

input     | desired output
---------------------------
a test    | a test
a  test   | a  test
a   test  | a   test

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

Все, что у меня есть, это / {2,}/g замена на  , но я не могу понять, как сделать подстановку соответствующейчисло, найденное {} в шаблоне.Есть ли способ сделать это, или было бы лучше сделать через какой-то итерационный процесс?

Я использую C # в этом случае: Regex.Replace(input, @" {2,}", " ")

Ответы [ 3 ]

0 голосов
/ 29 января 2019

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

 (?= )|(?<= ) 

Это регулярное выражение не будет соответствовать ни одному пробелу, а будет совпадать только с пробелом, за которым следует пробел или предшествует пробел.

Демонстрация

C # Демонстрация

Встроенный код для демонстрации, если по какой-то причине ссылка пропала по прошествии некоторого времени

    string pattern = @" (?= )|(?<= ) ";
    string substitution = @"&nbsp;";
    string input = @"a test
a  test
a   test";
    RegexOptions options = RegexOptions.Multiline;

    Regex regex = new Regex(pattern, options);
    string result = regex.Replace(input, substitution);
    Console.WriteLine(result);

Отпечатки,

a test
a&nbsp;&nbsp;test
a&nbsp;&nbsp;&nbsp;test
0 голосов
/ 29 января 2019

Вероятно, это наиболее технически эффективный способ:

\B | \B

Демонстрация: https://regex101.com/r/QnHQoz/1

Объяснение:

  • ДляВ некотором контексте \b соответствует границам слова, которые в основном представляют собой любые точки между символами слова (буквы и цифры) и несловесными символами.
  • \B - это отрицание \b, что означает, что оно соответствуетвсе, что \b не соответствует, и наоборот.
  • Следовательно, приведенный выше шаблон либо соответствует A.) точке между двумя символами одного типа, за которой следует пробел, либо B.) aпробел, за которым следует точка между двумя символами одного типа.
0 голосов
/ 29 января 2019

Вы можете использовать регулярное выражение для осмотра:

(?<= ) | (?= )

и заменить его на &nbsp;

RegEx Demo

Код C #:

Regex.Replace(input, @"(?<= ) | (?= )", "&nbsp;")

Подробности RegEx:

  • (?<= ) : сопоставление пробела, которому предшествует другой пробел
  • |: ИЛИ
  • (?= ): сопоставить пробел, за которым следует другой пробел
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...