如
第一种情况: <font color="#ff0000"><b>祖国祖国我爱你!2009年5月4日</b></font>
如取前5个字符,变成:<font color="#ff0000"><b>祖国祖国我...</b></font>
怎么写啊?
privite string myStrFunction(string str,int n)
{
//这里怎么写啊?看似简单,但我不会啊!只知道要用正则表达式.
}第二种情况:
<font color="#ff0000"><b>祖国祖国我爱你!2009年5月4日</b><u>其它字符</u></font>
如果取前19个字符,变成:<font color="#ff0000"><b>祖国祖国我爱你!2009年5月4日</b><u>其它...</u></font>
怎么写?
privite string myStrFunction(string str,int n)
{
//查了好多的资料都没有搞定,求兄弟姐妹们帮忙啊! }
第一种情况: <font color="#ff0000"><b>祖国祖国我爱你!2009年5月4日</b></font>
如取前5个字符,变成:<font color="#ff0000"><b>祖国祖国我...</b></font>
怎么写啊?
privite string myStrFunction(string str,int n)
{
//这里怎么写啊?看似简单,但我不会啊!只知道要用正则表达式.
}第二种情况:
<font color="#ff0000"><b>祖国祖国我爱你!2009年5月4日</b><u>其它字符</u></font>
如果取前19个字符,变成:<font color="#ff0000"><b>祖国祖国我爱你!2009年5月4日</b><u>其它...</u></font>
怎么写?
privite string myStrFunction(string str,int n)
{
//查了好多的资料都没有搞定,求兄弟姐妹们帮忙啊! }
解决方案 »
- 新手请问一个关于DevExpress的画图以及发布问题
- 请问,这个Socket编程,不太懂呢?
- 如何将两个字节的16进制数转换成小数
- asp.net 从web service 下载文件点按钮,自动存储到指定文件夹,不用弹出窗口,请问怎么弄?在线等!
- 问个正则表达式的问题,如果捕捉多行里的内容
- 关于DataReader的问题
- 请教一个简单问题:要在一个form窗体显示之后执行一些代码,应该把这些代码放在form的哪个事件里?(不要放在form_load())
- 请教.NET和C#有什么关系?编程时用什么软件?
- 学C#的一定要看
- 不知如何是好。
- 麻烦高手加上注释。
- 关于操作xml的几个效率问题,各位来看看.回答有分
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
namespace test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{ string source = @"<font color=""#ff0000""> <b>祖国祖国我爱你!2009年5月4日 </b> </font> ";
Regex rx=new Regex(@".*\<b\>");
string head=rx.Match(source).ToString();
rx=new Regex(@"(?<=<b>).*(?=</b>)");
string mid = rx.Match(source).ToString();
rx = new Regex(@"</b>.*");
string last = rx.Match(source).ToString();
mid = mid.Substring(0, 5) + "...";
MessageBox.Show(head + mid + last);
}
private string myStrFunction(string str,int n)
{
string source=str;
Regex rx=new Regex(@".*\<b\>");
string head=rx.Match(source).ToString();
rx=new Regex(@"(?<=<b>).*(?=</b>)");
string mid = rx.Match(source).ToString();
rx = new Regex(@"</b>.*");
string last = rx.Match(source).ToString();
mid = mid.Substring(0, n) + "...";
return head + mid + last;
}
private string myStrFunction2(string str,int n)
{
string source = str;
Regex rx = new Regex(@".*\<u\>");
string head = rx.Match(source).ToString();
rx = new Regex(@"(?<=<u>).*(?=</u>)");
string mid = rx.Match(source).ToString();
rx = new Regex(@"</u>.*");
string last = rx.Match(source).ToString();
mid = mid.Substring(0, n) + "...";
return head + mid + last; } }
}
{
StringBuilder result = new StringBuilder(1024);
Regex reg = new Regex(@"(^|[^<>]+)((?:<[^>]*>)*)");
Match m = reg.Match(src);
int vLen = 0;
while(m.Success)
{
vLen = m.Groups[1].Value.Length;
if (vLen < len)
{
result.Append(m.Groups[1].Value);
len -= vLen;
}
else
{
result.Append(m.Groups[1].Value.Substring(0, len));
len = 0;
}
if (len == 0)
{
result.Append("..." + m.Groups[2].Value);
return result.ToString();
}
else
{
result.Append(m.Groups[2].Value);
}
m = m.NextMatch();
}
return "";
}
有一个严重的问题:当所取的长度len 大于 内容长度时,返回值为空,因为没有用过正则表达式,我没法修改.请再帮我改一下,好不好?
最后一行改为 return src;搞定,结帖,给分.
{
StringBuilder result = new StringBuilder(1024);
Regex reg = new Regex(@"(^?[^<>]*)((?:<[^>]*>)*)");
Match m = reg.Match(src);
int vLen = 0;
while(m.Success)
{
vLen = m.Groups[1].Value.Length;
if (vLen < len)
{
result.Append(m.Groups[1].Value);
len -= vLen;
}
else
{
result.Append(m.Groups[1].Value.Substring(0, len));
len = 0;
}
if (len == 0)
{
result.Append("..." + m.Groups[2].Value);
return result.ToString();
}
else
{
result.Append(m.Groups[2].Value);
}
m = m.NextMatch();
}
return src;
}
呵呵,持续改进,楼主继续测试private string getSubString(string src, int len)
{
StringBuilder result = new StringBuilder(1024);
Regex reg = new Regex(@"(^?[^<>]*)((?:<[^>]*>)*)");
Match m = reg.Match(src);
int vLen = 0;
while(m.Success)
{
vLen = m.Groups[1].Value.Length;
if (vLen < len)
{
result.Append(m.Groups[1].Value);
len -= vLen;
}
else
{
result.Append(m.Groups[1].Value.Substring(0, len));
len = 0;
}
if (len == 0)
{
if (result.ToString() + m.Groups[2].Value == src)
{
return src;
}
else
{
result.Append("..." + m.Groups[2].Value);
return result.ToString();
}
}
else
{
result.Append(m.Groups[2].Value);
}
m = m.NextMatch();
}
return src;
}
在我这测试,getSubString("中华人民共和国",7)的返回结果是"中华人民共和国" 啊