使用释放字符和分隔符与正则表达式分隔字符串

我需要解析一个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

下一篇: How to process servlet requests during long shutdown