regex 正则表达式查找不在引号内的逗号

oalqel3c  于 2023-02-10  发布在  其他
关注(0)|答案(5)|浏览(140)

我在用C#逐行检查
示例数据:

bob jones,123,55.6,,,"Hello , World",,0
jim neighbor,432,66.5,,,Andy "Blank,,1
john smith,555,77.4,,,Some value,,2

Regex to pick commas outside of quotes不解析第二行,它是最接近的。

ru9i0ody

ru9i0ody1#

尝试以下正则表达式:
(?!\B"[^"]*),(?![^"]*"\B)
下面是一个演示:
regex101 demo

  • 它与第二行不匹配,因为插入的"没有右引号。
  • 它将不匹配如下所示的值:,r"a string",10,因为"边缘上的字母将创建单词边界,而不是非单词边界。

替代版本

(".*?,.*?"|.*?(?:,|$))
这将匹配内容和逗号,并与充满标点符号的值兼容
regex101 demo

wgx48brx

wgx48brx2#

下面的正则表达式用于解析一行中的每个字段,* 而不是 * 整行
应用有条不紊的和绝望的regex技术:分而治之

事例:字段不包含引号

  • ABC,
  • abc(行结束)

[^,"]*(,|$)

大小写:字段正好包含两个引号

  • abc "abc",abc,
  • abc "abc",abc(行结束)

[^,"]*"[^"]*"[^,"]*(,|$)

大小写:字段仅包含一个引号

  • abc "abc(行尾)
  • abc "abc,(并且在这一行结束之前没有引号)

[^,"]*"[^,"]$
[^,"]*"[^"],(?!.*")
既然我们有了所有的案子,我们就|把所有的东西放在一起,享受由此产生的怪物。

ki0zmccv

ki0zmccv3#

试试这个模式".*?"(*SKIP)(*FAIL)|,Demo

fdx2calv

fdx2calv4#

import re

print re.sub(',(?=[^"]*"[^"]*(?:"[^"]*"[^"]*)*$)',"",string)
368yc8dk

368yc8dk5#

Vasili Syrakis给出的最佳答案不适用于引号内的负数,例如:

bob jones,123,"-55.6",,,"Hello , World",,0
jim neighbor,432,66.5

以下正则表达式可用于此目的:

,(?!(?=[^"]*"[^"]*(?:"[^"]*"[^"]*)*$))

但我在这部分输入上并不成功:

,Andy "Blank,

相关问题