当前位置: 首页 > 面试题库 >

正则表达式模式拆分

危璞
2023-03-14
问题内容

我想解决这个问题。

  • , 逗号:分割条款
  • " 双引号:字符串值(忽略特殊字符)
  • [] 数组

例如:

输入: a=1,b="1,2,3",c=[d=1,e="1,2,3"]

预期输出:

    a=1
    b="1,2,3"
    c=[d=1,e="1,2,3"]

但是我无法获得超越结果。

我写了下面的代码:

 String line = "a=1,b=\"1,2,3\",c=[d=1,e=\"1,11\"]";
 String[] tokens = line.split(",(?=(([^\"]*\"){2})*[^\"]*$)");
 for (String t : tokens)
      System.out.println("> " + t);

我的输出是:

a=1
b="1,2,3"
c=[d=1
e="1,11"]

我需要更改以获得预期的输出?我应该坚持使用正则表达式还是其他解决方案更灵活,更易于维护?


问题答案:

这个正则表达式可以达到目的:

",(?=(([^\"]*\"){2})*[^\"]*$)(?=([^\\[]*?\\[[^\\]]*\\][^\\[\\]]*?)*$)"

它的工作原理是在逗号后添加一个用于匹配成对的方括号的预读-如果您 位于 方括号内,那么您当然不会在后面加上平衡的方括号。

这是一些测试代码:

String line = "a=1,b=\"1,2,3\",c=[d=1,e=\"1,11\"]";
String[] tokens = line.split(",(?=(([^\"]*\"){2})*[^\"]*$)(?=([^\\[]*?\\[[^\\]]*\\][^\\[\\]]*?)*$)");
for (String t : tokens)
    System.out.println(t);

输出:

a=1
b="1,2,3"
c=[d=1,e="1,11"]


 类似资料:
  • 问题内容: 我需要这件事的帮助。查看以下正则表达式: 我想查找这样的词:“自制”,“ aaaa-bbb”而不是“ aaa-bbb”,而 不是 “ aaa–aa–aaa”。基本上,我想要以下内容: 单词-连字符-单词。 它适用于所有内容,但该模式会通过:“ aaa–aaa–aaa”,但不应通过。哪种正则表达式适用于此模式? 问题答案: 可以从表达式中删除反斜杠: 下面的代码应该工作 请注意,您可以使

  • 我需要编写一个具有以下规则的正则表达式: null null 这些示例无效: > 12--11(因为它包含两个连字符) 1-2345(因为它包含5号) <>是字符出现在最后一个位置,那么在字符之前必须有一个数字not hypen。 即11-A(必须不及格)11-1A(必须及格)

  • 我是正则表达式的初学者,并尝试搜索特定的数字模式。以下数据以 XML 格式嵌入。 要求是提取数据(最里面的列表)。在这个例子中,数据从24779开始到24760。注意:每次数据可能不是从“24”开始。因此,我计划通过以下逻辑提取:如果标签名(在本例中:DUT_1_PC)具有非零的有效数据,并且有效数据的计数大于100,用逗号分隔,则提取该列表及其标签名(DUT_1_PC)。 我无法提取所需的数据。

  • 为什么要学正则表达式 实际上爬虫一共就四个主要步骤: 明确目标 (要知道你准备在哪个范围或者网站去搜索) 爬 (将所有的网站的内容全部爬下来) 取 (去掉对我们没用处的数据) 处理数据(按照我们想要的方式存储和使用) 我们在昨天的案例里实际上省略了第3步,也就是”取”的步骤。因为我们down下了的数据是全部的网页,这些数据很庞大并且很混乱,大部分的东西使我们不关心的,因此我们需要将之按我们的需要过

  • 我希望有一个regex来匹配以开头的所有行,后面跟着以开头的任意数量的行。理想情况下,我希望将带有的每一行放在一个组中。 以下是我希望得到的结果: (为了缩短起见,我用了[...]。) 它实际上给了我这个: 我希望我已经说得够清楚了,你能帮我解决这个问题。请不要犹豫,询问更多的细节。

  • 我正在尝试使用python中的正则表达式。我构建了正则表达式,如下所示。我知道用于匹配搜索字符串的开头。我已使用包含多个的匹配模式构建框架,但我不确定将如何尝试匹配搜索字符串中的模式。 我预计会引发错误,关于无效的正则表达式,但它不会引发任何错误,也不会返回任何匹配项。 所以,我的问题是或是有效的正则表达式吗?