【发布时间】:2015-07-25 16:17:34
【问题描述】:
我有这段文字:
iif(instr(|Wellington, New Zealand|,|,|)>0,|Wellington, New Zealand|,|Wellington, New Zealand| & |, | & |New Zealand|) & | to | & iif(instr(|Jeddah, Saudi Arabia|,|,|)>0,|Jeddah, Saudi Arabia|,|Jeddah, Saudi Arabia| & |, | & |Saudi Arabia|) & iif(|Jeddah, Saudi Arabia|=||,||,| via | & |Jeddah, Saudi Arabia|)
我可以对文本(如下)进行正则表达式来获取| 字符之间的所有元素的集合。我得到了 18 场比赛,比赛 #1 是 |,|
MatchCollection fields = Regex.Matches(str, @"\|.*?\|");
然后我想用占位符替换每个匹配项,例如 ~0~、~1~、~2~ 等直到 ~17~,这样我就可以运行我的其余代码。我不在乎是否所有的通用文本都被相同的占位符替换,如果我使用所有 18 个占位符,这会在占位符中留下空隙。
我的问题是我不能直接替换,因为替换字符串 |Jeddah, Saudi Arabia|,|,| 的这部分中的元素 #1 (|,|) 将替换它找到的第一个实例,其中正则表达式正确识别 |Jeddah, Saudi Arabia|作为一场比赛,|,| 作为另一场比赛。
我寻求的结果是这样的:
iif(instr(~0~,~1~)>0,~0~,~0~ & ~2~ & ~3~) & ~4~ & iif(instr(~5~,~1~)>0,~5~,~5~ & ~2~ & ~6~) & iif(~5~=~7~,~7~,~8~ & ~5~)
一旦我知道我有多少匹配项,我就会构建一个数组中的数字越来越多。我保留原始值并稍后将它们交换回来,这是容易的部分。
【问题讨论】: