RegEx для сопоставления специальных символов между двумя числами - PullRequest
2 голосов
/ 05 мая 2019

Я хочу сопоставить до и после определенной строки.У меня есть строка 10 990 Points Но я хочу только сопоставить все до и после  

Я пробовал .+?(?= ), но это берет все только до  .

Я ожидаювывод 10 990 Points будет «10990 баллов»

Console.WriteLine("Pris: " +
    Regex.Match(
        ProductListItem.Descendants("span")
        .Where(node => node.GetAttributeValue("class", "")
        .Equals("item-card-details-price-amount")).FirstOrDefault().InnerText
, @"([0-9]+)( )([A-z\s0-9]+)"));

Ответы [ 3 ]

1 голос
/ 05 мая 2019

Исправлено.Использование

([0-9]+)( )([A-z\s0-9]+)

В c # я использовал

Regex.Replace(string, @"([0-9]+)( )([A-z\s0-9]+)", m => m.Groups[1].Value + m.Groups[3].Value)

m.Groups[1].Value и m.Groups[3].Value - группы в Regex.Match, они заменяются.Вы можете видеть, что это работает здесь.

0 голосов
/ 05 мая 2019

Причина, по которой шаблон .+?(?= ) соответствует только тому, что находится перед  , заключается в том, что (?= является положительным косвенным утверждением, которое не использует никаких символов.

Если вы хотите сопоставить все раньше  и остальные после того, как вы можете использовать 2 группы захвата вместо 3, потому что вам не нужно совпадение для самого  .

В замене используйте 2 группы $1$2

(.+?) (.+)

Это будет соответствовать

  • (.+?) Захват группы 1, совпадение с 1 + символами, кромесимвол новой строки не жадный
  •   совпадение  
  • (.+) захват группы 2, сопоставление 1+ символов, кроме перевода строки

см. .NET regex demo

Если вы хотите сопоставлять только цифры ([0-9]+), ваш код может выглядеть следующим образом:

Regex.Replace("10 990 Points", @"([0-9]+) (.*)", m => m.Groups[1].Value + m.Groups[2].Value)

Примечание

В этом классе символов [A-z\s0-9]+ эта часть A-z соответствует , чем диапазоны a-z и A-Z

0 голосов
/ 05 мая 2019

Есть несколько способов сделать это. Для этого вы можете просто использовать группы захвата, например this expression :

(.*)(\")([\"\w\s0-9]+)(\")(.*)

enter image description here


Edit:

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

([0-9]+)( )([A-z\s0-9]+)

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

enter image description here

Graph

Этот график показывает, как это работает:

enter image description here

Замена

Вы можете просто использовать замену строки и заменить введенную строку на $ 1 $ 3.

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