例子(1):456系统2223asdf345g
例子(2):df3452asdfgsdf字符串如果有‘系统’字段,则提取之后第一次遇到的3个数字字符 ,比如(1)中 222
如果没有‘系统’,直接提取第一次遇到的3个数字字符,(2)中的 345这个正则表达式怎么写?
例子(2):df3452asdfgsdf字符串如果有‘系统’字段,则提取之后第一次遇到的3个数字字符 ,比如(1)中 222
如果没有‘系统’,直接提取第一次遇到的3个数字字符,(2)中的 345这个正则表达式怎么写?
解决方案 »
- 要做个上位机大家帮我看下,能用C#做吗?
- c# 水晶报表打印
- 怎样在派生类中实现对基类方法的调用
- 如何在异步下实现确定方法调用的顺序??(很简单,在线等,解决马上结帖)
- datagridview 中,一个小问题
- 另外一个问题,不过很简单了,关于.Net + Access + SQL + Replace的问题。只能给50分了,因为我已经快没了……
- 如何结束当前的线程
- 请问框架网页如何实现点击按钮跳转多个框架页面?
- C#熟手请进!
- 我用installshield 8.02 打包,.net软件,需要加一个自定义对诂框,请问加了对话框后,这个对话框的ID值在什么地方
- 有关C#连接数据库时执行SQL语句的问题
- 向高手请教C#环境配置问题!!!!
import java.util.regex.Pattern;public class Regular { public static void main(String[] args) {
String s = "";
String s1 = "456系统2223asdf345g";
String s2 = "df3452asdfgsdf";
Pattern p = Pattern.compile("\\D*[\\u7cfb\\u7edf]?(\\d{3})\\S*");
Matcher m1 = p.matcher(s1);
Matcher m2 = p.matcher(s2);
while(m1.find() | m2.find()) {
System.out.println("result1=" + m1.group(1) + "\nresult2=" + m2.group(1));
}
}
}
result1=456
result2=345
Regex reg = new Regex(@"(?<=系统)\d{3}|(?<=^(?:(?!系统|\d{3,}).)*)\d{3}(?!.*?系统)");
foreach (string s in test)
{
richTextBox2.Text += "源字符串:" + s + " 匹配结果:" + reg.Match(s).Value + "\n";
}
/*---------输出---------
源字符串:456系统2223asdf345g 匹配结果:222
源字符串:df3452asdfgsdf 匹配结果:345
*/还有种情况没处理,就是如果有“系统”,但是“系统”后不是连续的三个数字,有没有这种情况出现
Regex reg = new Regex(@"(?<=(系统|[^0-9]))\d{3}");
MatchCollection mc = reg.Matches(html);
Console.WriteLine("/*\n------输出结果------------");
foreach (Match m in mc)
{
Console.WriteLine(m.Groups[0].ToString());
}
Regex reg = new Regex(@"(?<=系统.*?)\d{3}|(?<=^(?:(?!系统|\d{3}).)*)\d{3}(?!.*?系统.*?\d{3})");
foreach (string s in test)
{
richTextBox2.Text += "源字符串:" + s + " 匹配结果:" + reg.Match(s).Value + "\n";
}
/*---------输出---------
源字符串:456系统2223asdf345g 匹配结果:222
源字符串:df3452asdfgsdf 匹配结果:345
源字符串:456系统abc2223asdf345g 匹配结果:222
源字符串:df3452asd系统fgsdf 匹配结果:345
*/string[] test = new string[] { "456系统2223asdf345g", "df3452asdfgsdf", "456系统abc2223asdf345g", "df3452asd系统fgsdf" };
Regex reg = new Regex(@"(?<=(系统).*?|^(?:(?!系统).)*)\d{3}(?(1)|(?!.*?系统.*?\d{3}))");
foreach (string s in test)
{
richTextBox2.Text += "源字符串:" + s + " 匹配结果:" + reg.Match(s).Value + "\n";
}
/*---------输出---------
源字符串:456系统2223asdf345g 匹配结果:222
源字符串:df3452asdfgsdf 匹配结果:345
源字符串:456系统abc2223asdf345g 匹配结果:222
源字符串:df3452asd系统fgsdf 匹配结果:345
*/
String s2 = "df3452asdfgsdf888d333";
Pattern p1 = Pattern.compile("[\\S&&\\D]*(\\d{3})\\S*?(\\u7cfb\\u7edf(\\d{3}))?\\S*");
Matcher m1 = p1.matcher(s1);
Matcher m2 = p1.matcher(s2);
while(m1.find() | m2.find()) {
if(m1.group(2) != null) {
System.out.println("result1=" + m1.group(3));
} else {
System.out.println("result1=" + m1.group(1));
}
System.out.println("result2=" + m2.group(1));
}
}
result1=222
result2=345
/*
惭愧啊。今儿我刚注册CSDN。这是我回的第一封帖。居然犯了那么多的错误,不可原谅啊!
明天我就要去面试了,但还是那么菜!还好最后终于抠出来了,天也快亮了。
佩服楼上的过客兄,让我豁然开朗。我俩的方法不同,但你的跟简洁。楼主可放心用了,呵呵~
希望各位牛大哥多帮帮菜小弟我。编程是很快乐的事,努力!明天会更好!*/
string[] strs = new string[] { "456系统2223asdf345g", "df3452asdfgsdf",
"456系统xx2223asdf345g", "df3452asd系统fgsdf" };Regex reg = new Regex(@"[\S&&\D]*(\d{3})\S*?(\u7cfb\u7edf)?\S*?(\d{3})?");
MatchCollection mc = reg.Matches(strs);
foreach (Match m in mc)
{
if(m.Groups[2] != null && m.Groups[3] != null) {
Console.WriteLine("result={0}" + m.Groups[3].ToString());
} else {
Console.WriteLine("result={0}" + m.Groups[1].ToString());
}
}
/*
result=222
result=345
result=222
result=345
*/
Regex reg = new Regex(@"(?<=(?(?=.*?系统).*?系统)\D*)[0-9]{3}");
foreach (string s in test)
{
Console.WriteLine("源字符串:" + s + " 匹配结果:" + reg.Match(s).Value + "\n");
}
/*---------输出---------
源字符串:456系统2223asdf345g 匹配结果:222
源字符串:df3452asdfg888sdf 匹配结果:345
源字符串:456系统abc2223asdf345g 匹配结果:222
源字符串:df3452asd系统fgsdf 匹配结果:
*/
(?=^[^系统]*$).*?(?<num>\d{3})|.*?系统.*?(?<num>\d{3})
取组为num的值
嗯,这是个需求明确的问题,我在2楼已经提了,楼主还没有给出回复if-else结构我在4楼第二个正则中用了,但还是由于需求的问题,如何写还需要根据需求来定
不好意思,我没有说得很清楚。
我的目的是对excel文件的其中一列的各项进行筛选,筛选结果写到另一列
筛选的条件有几个
比如含有AAA字符的优先把AAA写到另一列对应位置;
含有BBB的把BBB写到另一列
其中有一类是含有3位数字的,就是我前面说的情况,如果没有3位连续数字就判断其他条件。我的原意是像mbh0210兄写得那样
但是我试了 (?=^[^系统]*$).*?(?<num>\d{3})|.*?系统.*?(?<num>\d{3})
只能提取没有‘系统’字段的3位数字刚接触正则表达式,向各位学习
Regex reg = new Regex(@"\d{3}(?!.*?系统)|(?<=系统.*?)\d{3}");
foreach (string s in test)
{
richTextBox2.Text += "源字符串:" + s + " 匹配结果:" + reg.Match(s).Value + "\n";
}
/*---------输出---------
源字符串:456系统2223asdf345g 匹配结果:222
源字符串:df3452asdfgsdf 匹配结果:345
源字符串:456系统abc2223asdf345g 匹配结果:222
源字符串:df3452asd系统fgsdf 匹配结果:
*/
呵呵,我现在有些糊涂了
df3452asd系统fgsdf
这个倒底要不要取得数字呢不过不管哪种情况吧,要取得就4楼的,不要取得就14楼的