Как заменить подстроку в строке, которая содержит другую подстроку - PullRequest
0 голосов
/ 30 мая 2019

У меня есть эти строки.

Я хочу, чтобы каждая строка, содержащая «Id» в любом случае, заменяла «string» на int.

Не знаю, как сделать для этого группировку.

Это мой список

Я пробовал что-то вроде этого ^(.*(string).*(Id).*)$ и заменил на \1 или \2

public string ID {get; set}
public string IdSite {get; set}
public string IdParent {get; set}
public string IdPageType {get; set}
public string PageType {get; set}
public string IdTemplate {get; set}
public string TemplateName {get; set}
public string IdTemplateParent {get; set}

Ответы [ 2 ]

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

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

string(?=.*?id)

Позитивный прогноз утверждает, что id идет где-то после string. Также для соответствия id в любой форме вы должны включить регистронезависимое соответствие или использовать [iI][dD] в пользу id.

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

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

(?i)^(\s*\w+\s+)string(\s+Id)

Или, если ID может быть внутри слова

(?i)^(\s*\w+\s+)string(\s+\w*Id)
                          ^^^ 

Заменить на $1int$2.Смотрите regex demo .См. график регулярных выражений :

enter image description here

Подробности

  • (?i) - встроенный параметр без учета регистра
  • ^ - начало строки (или строка, если она не используется в текстовом редакторе, используйте (?im) в начале вместо (?i))
  • (\s*\w+\s+) - группа 1 ($1): 0+ пробелов, 1+ слов, 1+ пробелов
  • string - string слово
  • (\s+Id) -Группа 2 ($2): 1+ пробелы и ID строка (если вы используете \w* в этом шаблоне группы, он будет соответствовать 0+ символам слова).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...