0

我有这样一句话:

[FindThis|foo|bar] with some text between [FindThis|foo|bar]. [FindThis|foo|bar] and some more text.

我想用正则表达式替换这句话,以便我得到:

FindThis with some text between FindThis. FindThis and some more text.

我怎样才能做到这一点?整个早上都在尝试,我唯一想到的是:

Regex.Replace(myString, @"\[(\w).*\]", "$1");

这只给了我:

F and some more text.

4

2 回答 2

3

你可以更换

\[([^|]+)[^\]]+]

$1.

一点解释:

\[      match the opening bracket
[^|]+   match the first part up to the |
        (a sequence of at least one non-pipe character)
[^\]]+  match the rest in the brackets
        (a sequence of at least one non-closing-bracket character)
]       match the closing bracket

由于我们将第一部分存储在捕获组的括号中,因此我们将整个匹配替换为该组的内容。

快速 PowerShell 测试:

PS> $text = '[FindThis|foo|bar] with some text between [FindThis|foo|bar]. [FindThis|foo|bar] and some more text.'
PS> $text -replace '\[([^|]+)[^\]]+]','$1'
FindThis with some text between FindThis. FindThis and some more text.
于 2012-09-07T10:18:47.460 回答
0

如果您有其他没有“替代品”的替代品,例如[FindThat] with text in between [Find|the|other],您需要对正则表达式稍作更改:

\[([^|\]]+)[^\]]*]

说明:

\[ 匹配左括号  
[^|\]]+ 匹配第一部分直到 | 或者 ]  
        (至少一个非竖线或右括号字符的序列)  
[^\]]* 匹配括号中的其余部分  
        (任何非右括号字符的序列,包括无)  
] 匹配右括号  

这个答案大部分是从乔伊那里抄来的。

于 2012-09-07T10:58:18.707 回答