正则表达式可以在模式中查找文本并允许我用PowerShell替换未找到的文本吗? 所以我有这个问题,其中许多AssemblyInfo.CS在100多个项目中是不同的:
是否有可能找到AssemblyCopyright(“”)],然后允许我将自己的文本插入到其他文本的位置,即使文本在括号内是不同的?
答案 0 :(得分:1)
您可以使用此正则表达式:
AssemblyCopyright\(".*"\)\]
并替换为您选择的字符串:
AssemblyCopyright("The string of your choice")]
答案 1 :(得分:0)
Powershell正则表达式可能会令人不安,因为处理转义字符有多种方式:
所以当你在简单的引用之后嵌套你的字符串:
如果嵌套双引号之间的字符串,则字符串中的双引号必须使用标准的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 作为替换字符串(无引用)。