-1

我试图解析

|123|create|item|1497359166334|Sport|Some League|\|Team\| vs \|Team\||1497359216693|

使用正则表达式(https://regex101.com/r/KLzIOa/1/

我目前有

[^|]++

哪个正确解析所有内容,除了\|Team\| vs \|Team\|

我希望这被解析为|Team| vs |Team|

如果我将正则表达式更改为

[^\\|]++

它单独解析团队,而不是与转义管道一起解析

基本上我想解析管道之间的字段,但是,如果有任何转义的管道,我想捕获它们。所以以我的例子我希望

["123", "create", "item", "1497359166334", "Sport", "Some League", "|Team| vs |Team|", "1497359216693"]
4

3 回答 3

1

您可以交替使用:

  • \\.- 文字反斜杠后跟任何内容,或
  • [^|\\]+- 除了管道或反斜杠之外的任何内容
(?:\\.|[^|\\]+)+

https://regex101.com/r/KLzIOa/2

请注意,不需要所有格量词,因为不会发生回溯。

如果您还想将\|s替换为|s,然后再执行此操作:匹配\\\|并替换为|.

于 2020-01-18T10:14:17.400 回答
1

要处理转义,您应该将反斜杠和后面的字符匹配为单个“项目”。

(?:\\.|[^|])++

这也很方便地用于转义反斜杠本身!

然后从结果中删除反斜杠,使用简单的替换:

Replace: \\(.)
With: $1
于 2020-01-18T10:14:30.590 回答
1

利用:

(?:\\\||[^|])+

演示和解释

于 2020-01-18T10:15:57.450 回答