Regex 编辑powershell中特定符号之间的文本

Regex 编辑powershell中特定符号之间的文本,regex,powershell,replace,xhtml,Regex,Powershell,Replace,Xhtml,我想把xhtml文件的部分用引号括起来。这是一个故事的无标记对话。如果是对话,它总是以括号中的名称结尾。因此,我想找到所有包含开括号的段落”(),并用另一个符号将(和前面的之间的所有内容括起来 如果一条线看起来像这样 <p> sentence (name)</p> 句子(名称) …然后我想用引号将(和前面的之间的所有内容括起来,因此看起来如下所示: <p> "sentence" (name)</p> “句子”(名称) 很重要的一点是,我不去

我想把xhtml文件的部分用引号括起来。这是一个故事的无标记对话。如果是对话,它总是以括号中的名称结尾。因此,我想找到所有包含开括号的段落”(),并用另一个符号将
和前面的
之间的所有内容括起来

如果一条线看起来像这样

<p> sentence (name)</p>
句子(名称)

…然后我想用引号将(和前面的
之间的所有内容括起来,因此看起来如下所示:

<p> "sentence" (name)</p>
“句子”(名称)

很重要的一点是,我不去理会像这样的台词,因为它们是非对话的:

<p> sentence</p>
句子

我在powershell中设置了一些基础知识,正如我在以前处理这些文件时使用的那样,请参见下文,但我不确定如何在不覆盖内容的情况下将内容包含在“”中。以下是我尝试的内容:

Get-ChildItem 'C:\path\*.xhtml' -Recurse | ForEach {
(Get-Content $_ | ForEach { $_ -replace '\<p\>*\(' , '\<p\>\"*\"\(' }) |
Set-Content $_
}
Get ChildItem'C:\path\*.xhtml'-Recurse | ForEach{
(获取内容$\u124; ForEach{$\替换'\*\'(','\\'*\'('}))|
设置内容$_
}
不幸的是,我似乎弄错了什么,因为这只更改了我的一个文件,这是唯一的异常值(在开始标记之后),但忽略了结尾带括号的所有其他行:

<p>(TL: Sorry for a bit of late release)</p>
(TL:很抱歉发布有点晚)

改为:

 \<p\>\"*\"\(TL: Sorry for a bit of late release)</p>
\\“*\”\(TL:很抱歉发布有点晚)


这使得xhtml文件无法读取。我担心我的方法可能完全错误,希望您能提供一些关于如何实现这一点的信息。感谢您占用您的时间。

我的猜测是,我们可能希望添加多个捕获组,然后收集这些组中的数据,并根据需要使用以下表达式进行替换:

(<p>)(\s*)([^(]+?)(\s*)(\(.*\))(<\/p>)
忠告 的完整代码现在如下所示:

Get-ChildItem 'C:\path*.xhtml' -Recurse | ForEach { (Get-Content $_ | ForEach { $_ -replace '(<p>)(\s*)([^(]+?)(\s*)((.*))(<\/p>)' , '$1$2"$3"$4$5$6' }) | Set-Content $_ }
Get-ChildItem'C:\path*.xhtml'-Recurse | ForEach{(Get-Content$| ForEach{$.-replace'()(\s*)([^(]+?)(\s*)(.*)(),'1$2“$3”$4$5$6'})Set-Content$}
建议:

要避免在连续运行中重复插入“错误”,第三组也应排除它=>

-replace '(<p>)(\s*)([^("]+?)(\s*)(\(.*\))(<\/p>)','$1$2"$3"$4$5$6'
-替换“()(\s*)([^(“]+?)(\s*)(\(.*)()”,“$1$2”$3”$4$5$6”

太棒了,非常感谢!你帮了我很多麻烦。我完成的代码现在看起来是这样的:
Get ChildItem'C:\path\*.xhtml'-Recurse | ForEach{(Get Content$| ForEach{$-replace'()([^(]+?)(\s*)(\(.*)(),'1$2$3$4$5$6');将Content$设置为不插入
在连续运行时,第三组也应将其排除在外=>
-replace'()(\s*)([^(“]+?)(\s*)(\(.*)(),“$1$2”$3”$4$5$6”
-replace '(<p>)(\s*)([^("]+?)(\s*)(\(.*\))(<\/p>)','$1$2"$3"$4$5$6'