正则表达式匹配管道分隔文件

时间:2011-10-31 21:23:37

标签: java regex

我需要一个正则表达式的帮助来检查一行是否匹配一行管道描绘的数据。数据将以管道结束,并且不会引用。有些字段是空的。

以下是我正在尝试使用的内容:

Pattern dataPattern = Pattern.compile("(.+)\\|^");

以下是一个示例数据行:

GJ 3486|||121.10766667|-83.23302778|295.84892861999998|-24.832649669999999||-0.48399999999999999||.371|2MASS J08042586-8313589|8.9700000000000006|8.3539999999999992|8.1110000000000007||2MASS||

因为我只是想看看这条线是否与这个图案相匹配,我认为我提出的那个会找“blah blah blah |”。显然不是......任何人都可以帮助我吗?

杰森

5 个答案:

答案 0 :(得分:6)

^(.*?\|)*$

试试这个。

"
^        # Assert position at the beginning of the string
(        # Match the regular expression below and capture its match into backreference number 1
   .        # Match any single character that is not a line break character
      *?       # Between zero and unlimited times, as few times as possible, expanding as needed (lazy)
   \\|       # Match the character “|” literally
)*       # Between zero and unlimited times, as many times as possible, giving back as needed (greedy)
\$        # Assert position at the end of the string (or before the line break at the end of the string, if any)
"

正则表达式的一些问题:

  • 拳头没有重复,你应该重复这个模式,因为你有很多列。
  • 你匹配的东西然后匹配字符串的开头。不可能,这永远不会匹配。
  • 你总是希望一个角色匹配,但你说可能有空列。而是使用*量词。

答案 1 :(得分:1)

你的正则表达式应该是错的:

Pattern dataPattern = Pattern.compile("(.+)\\|$");

答案 2 :(得分:0)

这个怎么样?

str.length() > 1 && str.charAt(str.length()-1) == '|'

可能要快得多。

答案 3 :(得分:0)

Pattern dataPattern = Pattern.compile("^([^\\|]*\\|)+$");

这个正则表达式应该可行。但是如果你只想检查你的行是否以管道结尾,这个正则表达式更简单:

Pattern dataPattern = Pattern.compile("^.*\\|$");

答案 4 :(得分:0)

看起来您在行尾使用^,但您应该使用$代替。

"(.+)\\|$"