使用正则表达式查找模式

时间:2016-10-26 14:02:21

标签: regex powershell regex-negation

正则表达式可以在模式中查找文本并允许我用PowerShell替换未找到的文本吗? 所以我有这个问题,其中许多AssemblyInfo.CS在100多个项目中是不同的:

  • AssemblyCopyright(“Copyright©My Company Full Name Ltd 2016”)]
  • AssemblyCopyright(“Copyright©2016”)]
  • AssemblyCopyright(“©2016”)]

是否有可能找到AssemblyCopyright(“”)],然后允许我将自己的文本插入到其他文本的位置,即使文本在括号内是不同的?

3 个答案:

答案 0 :(得分:1)

您可以使用此正则表达式:

AssemblyCopyright\(".*"\)\]

并替换为您选择的字符串:

AssemblyCopyright("The string of your choice")]

答案 1 :(得分:0)

Powershell正则表达式可能会令人不安,因为处理转义字符有多种方式:

所以当你在简单的引用之后嵌套你的字符串:

  • 可以使用括号标记组:(。n)或.n
  • 双引号可视为标准字符
  • 括号可以视为标准字符

如果嵌套双引号之间的字符串,则字符串中的双引号必须使用标准的powershell转义字符进行转义:`"

因此以下所有示例都返回相同的结果

$pattern = 'AssemblyCopyright("what ever in there")]'

# standard regex
$pattern -replace 'AssemblyCopyright\(\"(.*)\"\)\]', 'AssemblyCopyright("new pattern")]'
# no quote escape
$pattern -replace 'AssemblyCopyright\("(.*)"\)\]', 'AssemblyCopyright("new pattern")]'
# no brackets escape
$pattern -replace 'AssemblyCopyright\("(.*)"\)]', 'AssemblyCopyright("new pattern")]'
# no parenthesis to define group
$pattern -replace 'AssemblyCopyright\(".*"\)]', 'AssemblyCopyright("new pattern")]'
# double quote instead of simple quote
$pattern -replace "AssemblyCopyright\(`".*`"\)]", "AssemblyCopyright(`"new pattern`")]"

答案 2 :(得分:0)

使用更高级的正则表达式技术的示例:

> 'AssemblyCopyright("foo bar")]' -replace '(?<=AssemblyCopyright\(")[^"]*', 'bar'
AssemblyCopyright("bar")]
  • (?<=AssemblyCopyright\(")是一个与指定的子表达式匹配的lookbehind断言,但不会使其成为匹配的一部分(捕获,在本例中为 >替换)。

  • 由于lookbehind断言找到了所有内容,包括属性的开头",我们所需要的只是匹配但不包括下一个"[^"]* )仅完全匹配双引号字符串的内容(属性值)。

  • 因此,我们只需要指定属性 value 作为替换字符串(无引用)。