急,关于java正则表达式的问题。

问题描述

高手们请看。有个关于正则表达式的问题。太苦恼了问题如下需要转变的字符串举例:a/123= b/456a/123= b/456+ c/789a/123= todata(b)把 a/123= b/456 变成 123= 456 把 a/123= b/456+ c/789变成 123=456+789把 a/123= todata(b)变成 123=todata(b)以上我都实现了: replaceAll("\b\S*?/", "")但是突然出了个异常数据就挂了把 a/123= todata(b,"YYYY/MM/DD")变成 123= todata(b,"YYYY/MM/DD")高手们明白我的意思么:就是把边界到/符号前边的内容删除。但是有"YYYY/MM/DD"的话需要保留。不进行替换。我就不会了。看了看非获取匹配还是不行。请高手们解答 问题补充:首先谢谢这位同事,谢谢您的帮助。您写的"\s[a-zA-Z]*?/|^[a-zA-Z].*?/"是不是说:以空白开头到/结尾或者以字母开头以/结尾的字符都替换成空我试了试,非常好。但是是我开始描述不清,怨我了。我的入力数据还是有点出入。我的入力数据其实是这样的1: 成员表:m2/年龄== "32"2: 成员表:m2/姓名== 库存表/姓名 or 管理表/姓名3: 成员表:m2/更新日期== todata(系统日, "YYYY/MM/DD")转变后1: 年龄== "32"2: 姓名== 姓名 or 姓名3: 更新日期== todata(系统日, "YYYY/MM/DD")这位高手能再看看么,我实在想不出来了最开始我是想问问,正则表达式中有没有一种概念,就是某某字符在匹配的时候,可以规定,其中某部分可以不被替换。不过您可以不用回答这个问题,帮我解决就可以了。谢谢了。

解决方案

边界到/符号前边的内容删除,通过你的例子的理解是:1.以空白字符开始到/的内容2.句首以字符开始到/的内容下面的代码为测试,通过public class T {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubString regex = "\s[a-zA-Z]*?/|^[a-zA-Z].*?/";//String s = "a/123= b/456+ c/789";//String s = "a/123= todata(b)";String s = "a/123 = todata(b,"YYYY/MM/DD")";System.out.println(s.replaceAll(regex, ""));}}
解决方案二:
简单的办法:先把YYYY/MM/DD替换成YYYY@MM@DD,然后用正则正常替换,然后YYYY@MM@DD再替换回来,
解决方案三:
说实话,还是没看懂你要什么,不知道这个是不是你要的
解决方案四:
public static void main(String[] args) {List<String> list=new ArrayList<String>();list.add("成员表:m2/年龄== "32"");list.add("成员表:m2/姓名== 库存表/姓名 or 管理表/姓名");list.add("成员表:m2/更新日期== todata(系统日, "YYYY/MM/DD") ");Pattern regex1 = Pattern.compile("[^/]+==\s*("\d+"|todata\(系统日,\s*"YYYY/MM/DD"\))", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);Pattern regex2 = Pattern.compile("([^/]+==\s*)[^/]+/([^/]*?\s*or\s*)[^/]*/([^/]*)", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);for (String string : list) {Matcher regexMatcher1 = regex1.matcher(string);String reg2="";if(regexMatcher1.find()){System.out.println(regexMatcher1.group());}else{Matcher regexMatcher2 = regex2.matcher(string);if(regexMatcher2.find()){String s=regexMatcher2.group(1)+regexMatcher2.group(2)+regexMatcher2.group(3);System.out.println(s);}}}}
解决方案五:
成员表:m2/年龄== "32" 成员表:m2/姓名== 库存表/姓名 or 管理表/姓名 成员表:m2/更新日期== todata(系统日, "YYYY/MM/DD") 这是3条数据是吧?
解决方案六:
什么叫不匹配的功能[^.......]就不匹配里面的内容了,匹配的是除了里面的东西或者(?<!)和(?!),这种形式不占用字符
解决方案七:
加一个预处理,先把不要匹配到的文本替换成其它字符串,如先把YYYY/MM/DD替换成YYYY$$MM$$DD,最后在替换回来。
解决方案八:
晚上终于有时间了其实把那个简单的改一下就好,如下:String regex = "成员表:|[^("YYYY/MM/DD")][a-zA-Z0-9u2E80-u9FFF]*?/";呵呵~~忙碌了一个小时测试代码:public class T {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubString regex = "成员表:|[^("YYYY/MM/DD")][a-zA-Z0-9u2E80-u9FFF]*?/"; String s = "1: 成员表:m2/年龄== "32" "; // String s = "2: 成员表:m2/姓名== 库存表/姓名 or 管理表/姓名 ";// String s = "3: 成员表:m2/更新日期== todata(系统日, "YYYY/MM/DD")";System.out.println(s.replaceAll(regex, ""));}}
解决方案九:
先前那段代码p1不稳定 定义成这样:Pattern p1=Pattern.compile("(?i)todata\(.+?\)");这个问题不跟帖了 还有问题的话 直接消息我 其实我对你的需求还是不明确 肯定有变通的更好的实现方法的
解决方案十:
想了下 好难
解决方案十一:
你的数据是带序号 1: 年龄== "32" 2: 姓名== 姓名 or 姓名 3: 更新日期== todata(系统日, "YYYY/MM/DD") ???还是不带序号年龄== "32" 姓名== 姓名 or 姓名 更新日期== todata(系统日, "YYYY/MM/DD") ???还是1: 年龄== "32" ------------------------另外一条2: 姓名== 姓名 or 姓名 ------------------------另外一条3: 更新日期== todata(系统日, "YYYY/MM/DD") 单条分开的???
解决方案十二:
String str=" 成员表:m2/年龄== "32" " +" 成员表:m2/姓名== 库存表/姓名 or 管理表/姓名 "+" 成员表:m2/更新日期== todata(系统日, "YYYY/MM/DD") ";str+=" xx:xx/xx==";Pattern p=Pattern.compile("(?s)[^ :]+:[^/]+/([^=]+)==(.+?)(?=[^ :]+:[^/]+/([^=]+)==)");Pattern p1=Pattern.compile("(?i)todata\([^,]+ *, *"YYYY/MM/DD"\)");Matcher m=p.matcher(str);while(m.find()){System.out.print(m.group(1)+"==");if(p1.matcher(m.group(2)).find()){System.out.print(m.group(2));}else{System.out.print(m.group(2).replaceAll("\S+/", ""));}System.out.println();}

时间: 2024-10-02 20:39:16

急,关于java正则表达式的问题。的相关文章

正则表达式 java-关于java正则表达式的问题 急求在线等

问题描述 关于java正则表达式的问题 急求在线等 public class RegexDemo { public static void main(String[] args) { String regex = "[A-Z]+_[A-Z]+{3,10}";//正则表达式 String data = "";//要验证的字符串 System.out.println(data.matches(regex)); } } /*要求格式为大写字母_大写字母 总长度不能超过10

java swing 视频-我是一名在校研一的学生,现在急需要java swing的视频,谁能推荐一下啊!谢谢啦

问题描述 我是一名在校研一的学生,现在急需要java swing的视频,谁能推荐一下啊!谢谢啦 我是一名在校研一的学生,现在急需要java swing的视频,谁能推荐一下啊!谢谢啦 解决方案 http://v.baidu.com/v?s=8&word=java%20swing%20%CA%D3%C6%B5&fr=ala11 解决方案二: 参考:http://www.java1234.com/a/yuanchuang/swing/ 解决方案三: http://school.itzcn.com

java正则表达式匹配斜杠

在正则表达式里面匹配一个斜杠,需要用4个斜杠: Java代码 import java.util.regex.Matcher; import java.util.regex.Pattern; public class test { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String textString = new String ("\\\&q

Java正则表达式实现条件查询浅析

Java正则表达式实现条件查询实例是如何的呢?我们在实际开发的过程中会碰到这样子的实际需求,那么我们来看看具体的实现过程,希望对你有所帮助. Java正则表达式实现条件查询实例: //Java正则表达式实现条件查询的要求:以正则条件查询指定目录下文件 //用于缓存文件列表 private ArrayList files = new ArrayList(); //用于承载文件路径 private String _path; //用于承载未合并的正则公式 private String _regexp

Java正则表达式入门

大家都知道,正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它用以描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配. 自从jdk1.4推出java.util.regex包,就为我们提供了很好的JAVA正则表达式应用平台. 因为正则表达式是一个很庞杂的体系,所以我仅例举些入门的概念,更多的请参阅相关书籍及自行摸索. \\ 反斜杠 \t 间隔 ('\u000

Java正则表达式中的捕获组的概念及相关API使用

要弄清这三个方法,首先要弄清Java正则表达式中的捕获组的概念.捕获组也就是Pattern中以括号对"()"分割出的子Pattern.至于为什么要用捕获组呢,主要是为了能找出在一次匹配中你更关心的部分.捕获组可以通过从左到右计算其开括号来编号.例如,在表达式 "(x)(y\\w*)(z)" 中,存在三个这样的组:  1.  x2.  y\\w*3.  z组零始终代表整个表达式.之所以这样命名捕获组是因为在匹配中,保存了与这些组匹配的输入序列的每个子序列.捕获的子序列

java正则表达式的一个问题

问题描述 java正则表达式的一个问题 我现在需要写一个正则匹配 BA BC CA CB 中的一个,不分大小写,两字母中间可以有斜杠,这个组合可以出现两次,用逗号隔开 我写了这样一个正则,但是太长了,有简便一些的写法吗? [B|b]/?[A|a]|[C|c]/?[A|a]|[B|b]/?[C|c]|[C|c]/?[B|b]((,|,)[\s\p{Zs}]*[B|b]/?[A|a]|[C|c]/?[A|a]|[B|b]/?[C|c]|[C|c]/?[B|b])? 解决方案 正则中可以忽略大小写匹配

字符串-java正则表达式匹配数字

问题描述 java正则表达式匹配数字 G3811/ G3885/ G655/l G030/l G3849/ G0150/ G5292/ G955/l G025/l G5300/ 这是控制台输出的字符串,但是我只想要他的数字 怎么匹配 解决方案 Pattern p = Pattern.compile("[0-9]"); Matcher m = p.matcher(elem.attr("abs:href").substring(22, 28)); while (m.fi

java正则表达式匹配问题

问题描述 java正则表达式匹配问题 我现在有一个字符串 String str= "[权利要求 5] 如权利要求 4所述 的墨盒 ,其特征在于 :" 想要提取到第几号权力要求 Pattern p = Pattern.compile("^[权利要求 (d)]"); Matcher m = p.matcher(str); if(m.find()){ System.out.println("["+m.group()+"]"); }

java 正则表达式问题

问题描述 要将一下字符串中的红色字体部分用java正则表达式替换为空,正则表达式应该怎么样写? body/div[3][@class='content']/div[2][@class='content-outer']/div[2][@class='fauxborder-left content-fauxborder-left']/div[2][@class='content-inner']/div[2][@class='main-outer']/div[2][@class='fauxborder