使用释放字符和分隔符与正则表达式分隔字符串
我需要解析一个EDI文件,其中的分隔符+
, :
和'
标志和逃逸(释放)性格?
。 你首先分裂成细分市场
var data = "NAD+UC+ABC2378::92++XYZ Corp.:Tel ?: ?+90 555 555 11 11:Mobile1?: ?+90 555 555 22 22:Mobile2?: ?+90 555 555 41 71+Duzce+Seferihisar / IZMIR++35460+TR"
var segments = data.Split(''');
那么每个段通过+
分成段数据元素,然后段数据元素通过:
被分成组件数据元素。
var dataElements = segments[0].Split('+');
上面的示例字符串由于使用了释放字符而未被正确解析。 我有特殊的代码处理这个问题,但我认为这应该都是可行的
Regex.Split(data, separator);
我对Regex'es不熟悉,并且找不到到目前为止这样做的方法。 我到目前为止最好的是
string[] lines = Regex.Split(data, @"[^?]+");
省略+
符号前的字符。
NA
U
ABC2378::9
+XYZ Corp.:Tel ?: ?+90 555 555 11 11:Mobile1?: ?+90 555 555 22 22:Mobile2?: ?+90 555 555 41 7
Duzc
Seferihisar / IZMI
+3546
TR
正确的结果应该是:
NAD
UC
ABC2378::92
XYZ Corp.:Tel ?: ?+90 555 555 11 11:Mobile1?: ?+90 555 555 22 22:Mobile2?: ?+90 555 555 41 7
Duzce
Seferihisar / IZMIR
35460
TR
所以问题是这可以通过Regex.Split来实现,而正则表达式分隔符应该是什么样子。
我可以看到,只有当他们没有在问号前面(转义)时,你才会想要分割加号+
?
。 这可以使用以下方法完成:
(?<!?)+
如果它们之前没有问号,则匹配一个或多个+
符号?
。
编辑:与前面的表达式的问题或错误,如果它不处理??+
或???+
或或????+
,换句话说它不处理情况?
s被用来逃避自己。
我们可以通过注意到如果有奇数的数字来解决这个问题?
在a +
那么最后一个肯定是逃避+
所以我们不能分裂,但如果有偶数?
之前加一个然后那些取消每个离开+
所以我们应该分裂它。
从以前的观察,我们应该提出一个表达式, 只有在偶数个问号前面加上+
的表达式才会出现 ?
,这里是:
(?<!(^|[^?])(??)*?)+
string[] lines = Regex.Split(data, @"+");
它是否符合要求?
这里是编辑逃避'?' 在'+'之前。
string[] lines = Regex.Split(data, @"(?<!?)[+]+");
结尾的'+'结尾将匹配分隔符“+”的连续出现次数。 如果你想要空格而不是。
string[] lines = Regex.Split(data, @"(?<!?)[+]");
链接地址: http://www.djcxy.com/p/73857.html
上一篇: split string with regex using a release character and separators