用于拆分由|分隔的字符串的正则表达式 当没有用双引号括起来时
我需要一个正则表达式来计算java中管道分隔字符串中的列数。 列数据将始终用双引号括起来,否则它将为空。
例如:
"1234"|"Name"||"Some description with ||| in it"|"Last Column"
以上内容应计为5列,包括“名称”列后的一列空列。
谢谢
这是一种方法:
String input = "\"1234\"|\"Name\"||\"Some description with
in it\”|\”Last Column\””; // \_______/ \______/\/\_________________________________/ \_____________/ // 1 2 3 4 5 int cols = input.replaceAll(“\”[^\”]*\””, “”) // remove “…” .replaceAll(“[^|]”, “”) // remove anything else than | .length() + 1; // Count the remaining |, add 1 System.out.println(cols); // 5
IMO虽然不是很强大。 例如,如果您计划处理转义引号,我建议不要使用正则表达式。
稍微改进了aioobe答案中的表达方式:
int cols = input.replaceAll("\"(?:[^\"\\]+|\\.)*\"|[^|]+", "") .length() + 1;
处理引号中的转义,并使用单个表达式删除除分隔符之外的所有内容。
这是我使用的一段正则表达式,它还处理转义引号和转义分隔符 。 它可能对您的要求(计数列)有些过分,但也许它可以帮助您或将来的其他人进行解析。
(?<=^|(?
这很复杂,但有这种疯狂的方法:如果在行的开头或结尾处的列为空,分隔的引号位于奇数位置,行或列以转义开头或结尾,我搜索的其他正则表达式将会失效分隔符,以及一堆其他边缘情况。
您使用管道作为分隔符的事实使得此正则表达式更难以阅读/理解。 提示是你自己看到一个管道“|”,它是正则表达式中的一个条件OR,当它被转义为“\ |”时,它就是你的分隔符。
- 我在哪里可以找到包javax.media.opengl?
- 使用Maven插件测试中的org.apache.maven.repository.RepositorySystem进行组件查找exception
- 客户端中的NoRouteToHostException
- 元编程 – 自解释代码 – 教程,文章,书籍
- 如何将时间戳转换为Date或DateTime对象?
- 如何为用户输入创建循环(直到用户输入有效输入)?
- java.lang.IllegalStateException:BindingResult和bean名称’category’的普通目标对象都不能作为请求属性使用
- Java中的可变维度数组?
- 垃圾收集行为与孤立的循环引用?