如何替换包含另一个子字符串的行中的子字符串

时间:2019-05-30 10:57:19

标签: regex

我有这行。

我希望包含“ Id”的每一行都以int替换“ string”。

不确定如何对此分组。

这是我的清单

我已经尝试过类似^(.*(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 个答案:

答案 0 :(得分:1)

您可以使用

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

或者,如果ID可能在单词内

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

替换为$1int$2。请参见regex demo。参见regex graph

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个以上的字符字符)。

答案 1 :(得分:1)

您无需匹配整行或捕获任何内容。而是尝试:

string(?=.*?id)

positive lookahead断言idstring之后。同样,要以任何形式匹配id,您都应启用不区分大小写的匹配,或使用[iI][dD]代替id