在 SAPIEN PS studio 2018 中编写 PS 表格。
问题:文本框中有一个随机字符串,其中包含方括号(“[”或“]”)
预期:需要允许用户仅输入一个括号序列
例如:
1> bla[]bla //valid
2> []bla //valid
3> bla[[] // not valid
4> b[la[] // not valid
5> b]la[] // not valid
etc..
我的代码到目前为止(使用了这里):
if ($this.Text -match '(\[){2,}') { $this.Text = $this.Text -replace '(.*?)\[(.*)', '$1$2' }
if ($this.Text -match '(\]){2,}') { $this.Text = $this.Text -replace '(.*?)\](.*)', '$1$2' }
此代码仅当括号匹配在一起时才有效(示例 3),但对于示例 4 和 5 则不起作用,请问有什么建议吗?
答案,作者:Lieven Keersmaekers
@('bla[]bla','[]bla','bla[[]','b[la[]','b]la[]') | % { $_ -replace '\[.*\]', '[]' -replace '\](?=.*\[)'}
答案1
针对您给出的示例和约束进行以下工作
-replace '\[.*\]', '[]' -replace '\](?=.*\[)'
要点是
'\[.*\]', '[]'
删除第一个左括号和最后一个右括号之间的所有内容'\](?=.*\[)'
删除剩余的右括号,并对左括号进行正向预测
例子
@('bla[]bla','[]bla','bla[[]','b[la[]','b]la[]') | % {
$_ -replace '\[.*\]', '[]' -replace '\](?=.*\[)'}
返回
bla[]bla
[]bla
bla[]
b[]
bla[]