C#下的一个字符串拆分问题 如何将字符串:a[sdk]adf[2wse]opj[asdf]2wesa拆分为a[sdk]adf[2wse]opj[asdf]2wesa如果用正则 希望给各思路 谢谢:) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 protected void Page_Load(object sender, EventArgs e) { string testString = TextBox1.Text; string[] result = testString.Split(new char[] { '[', ']' }); Response.Write("分解字串:<br>"); int count = 0; foreach (string rword in result) { if (count % 2 == 0&&rword.Length!=0) { Response.Write(rword + "<br>"); } else if(rword.Length!=0) { Response.Write("[" + rword + "]<br>"); } count++; } }方法笨了點,可以湊合著用. 能用就行 多谢EKingYan 再等等 看看还有没其它方法:) string str = "a[sdk]adf[2wse]opj[asdf]2wesa";Regex regex = new Regex(@"(\[\w+\])");string[] strs = regex.Split( str ); 正则的这样试下string yourStr = richTextBox1.Text;MatchCollection mc = Regex.Matches(yourStr, @"(\w+)(\[\w+\])?");foreach (Match m in mc){ richTextBox2.Text += m.Groups[1].Value + "\n"; richTextBox2.Text += m.Groups[2].Value + "\n";}上面是[]内外分开提取的,下面的是一起提取的string yourStr = richTextBox1.Text;MatchCollection mc = Regex.Matches(yourStr, @"\[?\w+\]?");foreach (Match m in mc){ richTextBox2.Text += m.Value + "\n";} 我的最简单,测试通过string str = "a[sdk]adf[2wse]opj[asdf]2wesa";string[] arr = str.Split(new char[] {'[',']'});for(int i=1;i<arr.Length;i+=2){ arr[i] = '[' + arr[i] + ']';} 我的分割与EKingYan的一样,但是偶数元素加方括号没必要那么麻烦 hdt(倦怠)丢掉了 []中的内容lxcnn(过客) 如果有 <> 符号无法通过 hdt(倦怠)丢掉了 []中的内容====================你测一下就知道了 string str = "a[sdk]adf[2wse]opj[asdf]2wesa";Regex regex = new Regex(@"(\[\w+\])");string[] strs = regex.Split( str ); =====================watch- strs {Length=7} string[] [0] "a" string [1] "[sdk]" string [2] "adf" string [3] "[2wse]" string [4] "opj" string [5] "[asdf]" string [6] "2wesa" string viena(维也纳N02) 也谢谢你 不过[]不一定出现在奇数还是偶数位置 也可能连续出现 比如:[1]a[b][c]d 怪我前面没有描述清楚我有一个思路 就是把[something]中的内容替换为<flag>[something]<flag>然后以<flag>拆分不知道可以不现在就是不知道如何替换 应该也是正则吧哪位大虾帮忙写个代码:) hdt(倦怠) 先感谢一下哈:)如果非[]中的字符包含"<"或">"就无法通过 以为只有字母,那这个总行了吧string yourStr = richTextBox1.Text;MatchCollection mc = Regex.Matches(yourStr, @"\[?[^\[\]]+\]?");foreach (Match m in mc){ richTextBox2.Text += m.Value + "\n";} lxcnn(过客) 高!!!!你的这个是不是原理和hdt(倦怠)的差不多能不能稍微解释一下我把分提高了 Regex regex = new Regex(@"(\[[^\[\]]+\])"); 你说的是不清楚,\w 代表任意单词字符 , 一开始你可没说里面有<>非单词字符 具体实现原来没研究过-_-!!!我写的就是把匹配到的内容取到一个集合里\[?[^\[\]]+\]?上面正则的意思就是,把不包含“[”和“]”的字符串,可以以“[”开头,以“]”结尾,也可以没有,取到一个集合里,说起来有点绕嘴,就是开头和结尾可有可无,中间不包括“[”和“]”的字符串取到集合里,然后foreach遍历对里面的内容进行后续处理就行了hdt(倦怠) 大哥的方法也可以做到的,只不过你没有说清楚,以为只有字母呢 如果在 Regex.Split 表达式中使用捕获组,则生成的字符串数组中会包含捕获组。"one-two-banana" 用(-)会产生数组项“one”、“-”、“two”、“-”、“banana”。 To hdt(倦怠): 原来 Regex的Split包含捕获组,一直以为跟string的split一样-_-!!! 谢谢你了顺便问一下给帖子提分怎么操作 我刚注册的号 大家这么热情 只给20太少了 我最开始用的是Regex.Split(string input, string pattern)就不包含捕获组用Regex regex = new Regex(string pattern)regex.Split(string input)就包含原来是这个样子的 <script>strTest = "a[sdk]adf[2wse]opj[asdf]2wesa";arrTest =strTest.split("[");for(i=0; i<arrTest.length; i++){//document.write(arrTest[i]+"<br>");inArrTest = arrTest[i].split("]");for (k=0; k<inArrTest.length; k++){document.write(inArrTest[k]+"<br>");}} </script> <script language="javascript">strTest = "a[sdk]adf[2wse]opj[asdf]2wesa";arrTest =strTest.split("[");for(i=0; i<arrTest.length; i++){//document.write(arrTest[i]+"<br>");inArrTest = arrTest[i].split("]");for (k=0; k<inArrTest.length; k++){if (inArrTest.length>=2 && k==0){document.write("["+inArrTest[k]+"]<br>");}else{document.write(inArrTest[k]+"<br>");}}}</script> 那请问如何把a[sdk]adf[2wse]opj[asdf]2wesa拆分成:a[sdk]adf[2wse]opj[asdf]2wesa 在FORM中调用其它类,如何在调用的类中修改FORM的TEXTBOX值? 关于一个正则问题 vs2008的release模式为什么也能调试? 安装包的问题~~急 数据强转问题! 能否通过GPRS无线网卡做数据同步? WPF 如何设计出这样有特色的按钮.. c#做智能升级程序 请问谁知道正版Visual Studio .net企业版的价格? 想要通过两个word生成PDF 如何判断数据库里面是否已经存在数据? 寻找C#语法帮助.chm文件...Thank you !
{
string testString = TextBox1.Text;
string[] result = testString.Split(new char[] { '[', ']' });
Response.Write("分解字串:<br>");
int count = 0;
foreach (string rword in result)
{
if (count % 2 == 0&&rword.Length!=0)
{
Response.Write(rword + "<br>");
}
else if(rword.Length!=0)
{
Response.Write("[" + rword + "]<br>");
}
count++;
}
}方法笨了點,可以湊合著用.
Regex regex = new Regex(@"(\[\w+\])");
string[] strs = regex.Split( str );
MatchCollection mc = Regex.Matches(yourStr, @"(\w+)(\[\w+\])?");
foreach (Match m in mc)
{
richTextBox2.Text += m.Groups[1].Value + "\n";
richTextBox2.Text += m.Groups[2].Value + "\n";
}上面是[]内外分开提取的,下面的是一起提取的string yourStr = richTextBox1.Text;
MatchCollection mc = Regex.Matches(yourStr, @"\[?\w+\]?");
foreach (Match m in mc)
{
richTextBox2.Text += m.Value + "\n";
}
string str = "a[sdk]adf[2wse]opj[asdf]2wesa";
string[] arr = str.Split(new char[] {'[',']'});
for(int i=1;i<arr.Length;i+=2)
{
arr[i] = '[' + arr[i] + ']';
}
lxcnn(过客) 如果有 <> 符号无法通过
====================
你测一下就知道了
Regex regex = new Regex(@"(\[\w+\])");
string[] strs = regex.Split( str );
=====================
watch
- strs {Length=7} string[]
[0] "a" string
[1] "[sdk]" string
[2] "adf" string
[3] "[2wse]" string
[4] "opj" string
[5] "[asdf]" string
[6] "2wesa" string
也可能连续出现 比如:[1]a[b][c]d 怪我前面没有描述清楚
我有一个思路 就是把[something]中的内容替换为<flag>[something]<flag>然后以<flag>拆分
不知道可以不
现在就是不知道如何替换 应该也是正则吧
哪位大虾帮忙写个代码:)
先感谢一下哈:)
如果非[]中的字符包含"<"或">"就无法通过
MatchCollection mc = Regex.Matches(yourStr, @"\[?[^\[\]]+\]?");
foreach (Match m in mc)
{
richTextBox2.Text += m.Value + "\n";
}
你的这个是不是原理和hdt(倦怠)的差不多能不能稍微解释一下我把分提高了
原来 Regex的Split包含捕获组,一直以为跟string的split一样-_-!!!
谢谢你了
顺便问一下给帖子提分怎么操作 我刚注册的号 大家这么热情 只给20太少了
Regex.Split(string input, string pattern)
就不包含捕获组
用
Regex regex = new Regex(string pattern)
regex.Split(string input)
就包含
原来是这个样子的
strTest = "a[sdk]adf[2wse]opj[asdf]2wesa";
arrTest =strTest.split("[");
for(i=0; i<arrTest.length; i++)
{
//document.write(arrTest[i]+"<br>");
inArrTest = arrTest[i].split("]");
for (k=0; k<inArrTest.length; k++)
{
document.write(inArrTest[k]+"<br>");
}
}
</script>
strTest = "a[sdk]adf[2wse]opj[asdf]2wesa";
arrTest =strTest.split("[");
for(i=0; i<arrTest.length; i++)
{
//document.write(arrTest[i]+"<br>");
inArrTest = arrTest[i].split("]");
for (k=0; k<inArrTest.length; k++)
{
if (inArrTest.length>=2 && k==0)
{
document.write("["+inArrTest[k]+"]<br>");
}
else
{
document.write(inArrTest[k]+"<br>");
}
}
}
</script>
a[sdk]adf[2wse]opj[asdf]2wesa
拆分成:
a
[
sdk
]
adf
[
2wse
]
opj
[
asdf
]
2wesa