【问题标题】:Matching if a csv row follows a particular pattern using regex使用正则表达式匹配 csv 行是否遵循特定模式
【发布时间】:2017-04-23 13:49:30
【问题描述】:

我想编写一个正则表达式,如果从第 3 列到末尾的任何 csv 文件列是非零值,它将返回 true 所以如果行像

//sample code for which regex needs to be used    
121,321,0,0,0,0,0,0  it should return false
121,321,1,0,0,0,0,0  it should return true
121,321,0,0,0,0,1,0  it should return true


    public static void main(String[] args) {
            String text = "1234,1102,0,0,0,0";
            String regex = "";
            System.out.println(Pattern.matches(regex, text));

            }

我是正则表达式的新手,谁能帮我解决这个问题

【问题讨论】:

  • 你尝试过任何正则表达式吗?
  • 这样的案例怎么用rejex处理就不用开始了。
  • 我认为您不了解此站点的工作原理。我们是一个问答网站,而不是代码编写服务。在我们为您提供帮助之前,您必须向我们表明您已经做出了努力。见:Why is "Can someone help me?" not an actual question?
  • 我试过这个 String regex = "[[[0-9]*[[^0]]],]*";但它每次都返回真实

标签: java regex csv


【解决方案1】:

你可以试试这个:

regex="^[0-9]+,[0-9]+,(0,)*(0)*[1-9]+.*$";

【讨论】:

  • 非常感谢 :) 它对我有用。我会在它周围做更多的测试
  • 在这种情况下失败 String text = "1234,11002,0,0,01,0";
  • 这不适用于较长的行:121,321,0,0,0,0,1,0,0,0,0,0,0。该问题没有说明 csv 行是否总是统一的。
  • @Pharaoh 实际上它确实适用于更长的行 - 特别是对于您提供的示例。在声明某些东西之前 - 请先测试 - 你可以测试它here
  • 我现在已经对其进行了测试,它完全符合我的想法。但我误解了这个问题。我读过“最后三列”,而它说“从第三列开始”。看我的回答,那显然是错误的。
【解决方案2】:

如果唯一的条件是最后三列全部为0,则以下更简单的正则表达式也可以工作:

.*(?<!,0,0,0)$

编辑:我误解了这个问题。不是“最后三个”,而是“所有列,从第三个开始”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    相关资源
    最近更新 更多