[笔记]如何使用正则表达式提取字符串中的分隔元素
来源:互联网 发布:js代码黑客 编辑:程序博客网 时间:2024/06/02 00:26
前言:将自己曾经参与的帖子择其精华整理与此,便于将来自己查阅方便,是为之记。
qianduo (flyinsky)在CSDN论坛上发帖询问:“怎么取出字符串到数组中”
例从一个文本文件中一行一行读出数据,然后保存到table中.
AAA,BBB,CCC,DDD
01234,ABC,"AA,BB",ABC
在第二行时怎么取出""里面的内容为一个字符串.
以前是用string.split(",")取出来是变成五个字段了.
snto(神中神)提出两个建议:
1、 更换分隔字符串,如“01234,ABC,"AA,BB",ABC” --> “01234,ABC,"AA|BB",ABC ”
2、 挨行的搜索,找到‘"’字符的时候做一次技术处理,记录位置1,找到第二个‘"’的时候,记录位置2,然后用substring之类的函数截取
sanniko(雁衔泥)的建议也是这样:
1、 取出第一个 “ 的位置
2、 取出最后一个”的位置
3、 用String.Substring
vinsonhwj发现“这种以逗号为分隔的文本格式,是一种CSV文件格式来的。”
并给出了读取CSV格式的代码。
neil_cn(Neil)也给出了读取的代码。
上面的答案都不错,因为用过几次正则表达式,所以我给出的答案是:
Dim strLine As String = """AA, BB, c"", 01234,ABC,""AA,BB"",ABC ,x ,""A, BB"""
Dim rxg As New System.Text.RegularExpressions.Regex(strPattern)
Dim ResultCollection As System.Text.RegularExpressions.MatchCollection = _
rxg.Matches(strLine)
For Each MatchResult As System.Text.RegularExpressions.Match In ResultCollection
Debug.WriteLine(MatchResult.Groups(0).ToString())
Next
解释如下:
对于这样的复杂字符串:
"AA, BB, c", 01234,ABC,"AA,BB",ABC ,x ,"A, BB"
根据其特点,要么是不含","的字符串,要么是可能包含","的被引号包围的字符串,
使用如下模式匹配:
(("[/w, ]+")|([/w ]+))
得到如下结果,每个结果分一行:
"AA, BB, c"
01234
ABC
"AA,BB"
ABC
x
"A, BB"
本以为这就完美解决了问题,可是qianduo(flyinsky)继续又问道:
“123”,”456””789”
123是第一列 456”789 是第二列
那怎么用正则表达式?
难不倒我,正则表达式仍然能够搞定,请看:
使用如下匹配格式:
([/w ]+)|(("[/w, ]+"[/w ]*)+)
(("[/w, ]+"[/w ]*)+) 用来匹配下列格式
"12,9"
"456""789"
"111"adf"22" "333"
对于下面字符串,够复杂了吧?
"123","456""789","12,9","111"adf"22" "333"
匹配结果:
"123"
"456""789"
"12,9"
"111"adf"22" "333"
不屈不挠的qianduo(flyinsky)还有问题:
现在还有一个小的问题..
123,AAA,,qwe,
这样的话只会有三列,而不是四列,第三列为空
杀手锏:(?<=...)和(?=...)
经过测试,使用如下模式可以解决问题:
([/w ]+)|(("[/w, ]+"[/w ]*)+)|((?<=,)(?=,))|(^(?=,))|((?<=,)$)
其中关键点如下:
"((?<=,)(?=,))" 匹配 ",,"
"(^(?=,))" 匹配 行首的","
"((?<=,)$)" 匹配 行尾的","
对于如下字符串:
,,"123","456""789",,,"12,9",123,,"111"adf"22" "333",,
匹配结果如下:
<空白>
<空白>
"123"
"456""789"
<空白>
<空白>
"12,9"
123
<空白>
"111"adf"22" "333"
<空白>
<空白>
结论:
正则表达式在匹配东东上的能力不容小视……
- [笔记]如何使用正则表达式提取字符串中的分隔元素
- 使用正则表达式提取字符串中的内容
- 正则表达式提取字符串中的数字
- js正则表达式提取字符串中的数字
- 提取字符串中的url网址 正则表达式
- 正则表达式提取字符串
- 将字符串按正则表达式分隔,忽略括号中的内容
- php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串
- php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串
- php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串
- 提取以“|”分隔的字符串的各个分隔项元素
- 举例说明如何使用正则表达式去掉字符串中的一些特殊符号
- 示例:js使用正则表达式group来提取字符串中的数据
- PHP提取字符串中的图片地址[正则表达式]
- .net利用正则表达式提取字符串中的数字
- 正则表达式-提取字符串中的整数或小数
- java正则表达式提取字符串中的中文信息
- Java正则表达式非贪婪提取字符串中的每个数字
- 在linux下安装软件
- C++内存管理——控制C++的内存分配
- C++内存管理——浅谈C++中的内存管理
- ASP中时间格式的转换
- C++内存回收——浅议C++ 中的垃圾回收方法
- [笔记]如何使用正则表达式提取字符串中的分隔元素
- Tomcat+JSP经典配置实例
- NAT爆破者:在不同NAT后的主机间建立TCP连接
- C++内存回收——驯服C++中的野指针
- C++内存回收——C++内存对象大会战
- 软件包 javax.servlet 不存在
- 郁达夫诗词选
- linux vsftpd 基本配置
- 我的股票:2007/03/30