gpt4 book ai didi

c# - 使用释放字符和分隔符使用正则表达式拆分字符串

转载 作者:太空狗 更新时间:2023-10-29 20:27:46 25 4
gpt4 key购买 nike

我需要解析一个 EDI 文件,其中分隔符是 +:' 符号以及转义符 (release ) 字符是 ?。你首先分成几个部分

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('\'');

然后每个segment通过+拆分成segment数据元素,然后segment数据元素通过:拆分成component数据元素。

var dataElements = segments[0].Split('+');

由于使用了释放字符,上述示例字符串无法正确解析。我有处理这个的特殊代码,但我认为这应该可以使用

Regex.Split(data, separator);

我不熟悉 Regex's,到目前为止还找不到方法。到目前为止我想到的最好的是

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 是否可行,以及正则表达式分隔符应该是什么样子。

最佳答案

我看得出来,只有在加号 + 前面没有(转义) 问号 ? 时,您才想拆分它们.这可以使用以下方法完成:

(?<!\?)\+

这匹配一个或多个 + 符号,如果它们前面没有问号 ?

编辑:如果前一个表达式不能处理 ??+???+????+,换句话说,它不处理 ? 用于逃避自身的情况。

我们可以通过注意如果在 + 之前有奇数个 ? 来解决这个问题,那么最后一个肯定是在转义 + 所以我们不能拆分,但是如果在加号之前有偶数个 ? 那么它们相互抵消,留下 + 所以我们应该围绕它拆分。

根据之前的观察,我们应该想出一个匹配 + 的表达式 only if 它前面有一个偶数 的问题标记 ?,这里是:

(?<!(^|[^?])(\?\?)*\?)\+

关于c# - 使用释放字符和分隔符使用正则表达式拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18443517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com