本帖最后由 gto250 于 2014-12-6 22:32 编辑
我有一段数据需要提取,采用正则的方式进行转换。
在正常的情况下,能实现要求。代码如下
#include<array.au3>
$str="a a a a,a、a"
$ret=StringRegExpReplace($str,"\s+|\,|、","|")
$str_arr=StringSplit($ret,"|")
_ArrayDisplay($str_arr)
输出为:a|a|a|a|a|a
但是由于该数据输入不可控,有时会出现错误的输入。代码如下
#include<array.au3>
$str="a a , a a,a、a"
$ret=StringRegExpReplace($str,"\s+|\,|、","|")
$str_arr=StringSplit($ret,"|")
_ArrayDisplay($str_arr)
输出为:a|a|||a|a|a|a
StringSplit后就出现了空值的状况。
另一种错误的输入。代码如下:
#include<array.au3>
$str="|a a , a a,a、a"
$ret=StringRegExpReplace($str,"\s+|\,|、","|")
$str_arr=StringSplit($ret,"|")
_ArrayDisplay($str_arr)
输出为: |a|a|||a|a|a|a
当然这个错误的输入,也会表现为,在字符串的任意处会有|的存在,导致StringSplit后就出现了空值
a表示任意长度的字符串。
想要实现的是将顿号,逗号,任意长度的空白符替换为|分隔符,然后分割该字符串
以上的错误情况可以归结为:
1、在需提取的字符串间同时存在顿号、逗号或者是空白符,导致替换后|与|连续存在,分割后出现空值
2、由于输入的字符串不可控,导致字符串任意区间存在|间隔符,分割后出现空值
当然,在分割后,进行数组循环,对空值进行忽略,重新生成一个数组这个方法可以满足我的要求。
但是我想用StringRegExp实现提取像“ |a|a|||a|a|a|a|”这样的字符串中,|与|之间的非空值数据,当然,也有可能字符串的的第一个|之前的数据也需要提取,像这样“a|a|||a|a|a|a”
因为对正则不怎么熟悉,所以在此提问,希望获得帮助 |