如何在管道分隔文件中找到未被管道包围的String?

时间:2014-11-19 19:32:09

标签: java regex regex-negation regex-lookarounds

我试图找到一个匹配任何一对双引号的正则表达式,它前面没有一个管道,后面有一个管道。

以下是示例行:

1||1|0|0|1|0|""|0|0|||""|""Billy""|"Johnson"|

在这一行中,我希望匹配单词Billy前后的双引号对。

我试过的正则表达式是:

[^|]""[^|]

这似乎很简单,但不符合我的想法。

是否有匹配那些的正则表达式?

(具体来说,我将尝试使用String.replaceAll()替换Java中的引号,但是一般的正则表达式解决方案可以让我开始朝着正确的方向前进。)

2 个答案:

答案 0 :(得分:2)

你需要逃避|符号,因为它在RegEx中具有特殊含义。

请尝试使用[^\|]""[^\|]。您可以使用在线工具验证这一点,例如http://www.roblocher.com/technotes/regexp.html

上的工具

然而,根据anubhava的建议,你只在报价上寻找匹配,而不是中间的文本。试试这个:

(?<!\|)""|""(?!\|)

它将匹配没有|的字符串在&#34;&#34;之前,或者没有|的地方在&#34;&#34;

之后

答案 1 :(得分:2)

您可以使用此正则表达式:

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

RegEx Demo