什么是C#Regex相当于Java的appendReplacement和appendTail
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了什么是C#Regex相当于Java的appendReplacement和appendTail,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2499字,纯文字阅读大概需要4分钟。
内容图文
UPDATE
这就是我想出的.我还没有测试它,因为它是仍然需要移植的更大代码段的一部分.
你能看到任何看起来不合适的东西吗?
private const string tempUserBlock = "%%%COMPRESS~USER{0}~{1}%%%";
string html = "some html";
int p = 0;
var userBlock = new ArrayList();
MatchCollection matcher = preservePatterns[p].Matches(html);
int index = 0;
StringBuilder sb = new StringBuilder();
int lastValue = 0;
foreach(Match match in matcher){
string matchValue = match.Groups[0].Value;
if(matchValue.Trim().Length > 0) {
userBlock.Add(matchValue);
int curIndex = lastValue + match.Index;
sb.Append(html.Substring(lastValue, curIndex));
sb.AppendFormat(tempUserBlock, p, index++);
lastValue = curIndex + match.Length;
}
}
sb.Append(html.Substring(lastValue));
html = sb.ToString();
以下原始帖子:
这是原始的Java:
private static final String tempUserBlock = "%%%COMPRESS~USER{0}~{1}%%%";
String html = "some html";
int p = 0;
List<String> userBlock = new ArrayList<String>();
Matcher matcher = patternToMatch.matcher(html);
int index = 0;
StringBuffer sb = new StringBuffer();
while (matcher.find())
{
if (matcher.group(0).trim().length() > 0)
{
userBlock.add(matcher.group(0));
matcher.appendReplacement(sb, MessageFormat.format(tempUserBlock, p, index++));
}
}
matcher.appendTail(sb);
html = sb.toString();
到目前为止我的C#转换
private const string tempUserBlock = "%%%COMPRESS~USER{0}~{1}%%%";
string html = "some html";
int p = 0;
var userBlock = new ArrayList();
MatchCollection matcher = preservePattern.Matches(html);
int index = 0;
StringBuilder sb = new StringBuilder();
for(var i = 0; i < matcher.Count; ++i){
string match = matcher[i].Groups[0].Value;
if(match.Trim().Length > 0) {
userBlock.Add(match);
// WHAT DO I DO HERE?
sb.Append( string.Format(tempUserBlock, p, index++) );
}
}
// WHAT DO I DO HERE?
matcher.appendTail(sb);
html = sb.toString();
请参阅上面的评论,在那里我问,“我在这做什么?”
澄清
上面的Java代码在某些HTML上执行字符串替换.它保存了最初替换的文本,因为在完成一些空格压缩后需要重新插入.
最佳答案:
没有必要重现Java的appendReplacement / appendTail功能; .NET有更好的东西:MatchEvaluator.检查出来:
string holder = "Element {0} = {1}";
string s0 = "111 222 XYZ";
ArrayList arr = new ArrayList();
string s1 = Regex.Replace(s0, @"\d+",
m => string.Format(holder, arr.Add(m.Value), m.Value)
);
Console.WriteLine(s1);
foreach (string s in arr)
{
Console.WriteLine(s);
}
输出:
Element 0 = 111 Element 1 = 222 XYZ
111
222
有几种方法可以实现MatchEvaluator,所有这些都在this article中进行了详细讨论.这个(lambda表达式)是迄今为止最酷的.
内容总结
以上是互联网集市为您收集整理的什么是C#Regex相当于Java的appendReplacement和appendTail全部内容,希望文章能够帮你解决什么是C#Regex相当于Java的appendReplacement和appendTail所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。