【问题标题】:Regular Expression Within a Regular Expression正则表达式中的正则表达式
【发布时间】:2011-04-18 19:58:03
【问题描述】:

我有一个客户给我的 CSV 文件,我需要将其转换为我正在处理的程序的一堆 if 语句。数据如下所示:

Alfred E. Burr     A.E Burr     A.E Bu     Burr
A.I Prince     Prince R.V.T.S     Prince Tech

我需要把它变成:

if(school IS 'Alfred E. Burr' OR school IS 'A.E Burr' OR school IS 'A.E Bu' OR schools IS 'Burr')
else if(school IS 'A.I Prince' OR school IS 'Prince R.V.T.S' OR school IS 'Prince Tech')

我已经有代码可以在编写的 if 语句之后执行。我会手动编写代码,但列表中有大约 150 所学校。

到目前为止,我已经构建了这个匹配整行的正则表达式,但我不确定是否可以使用我在其中创建的子表达式来匹配行内的每个学校:

^(([A-Za-z0-9\.\ \&\']+)\t?)+$

那么使用该基础,我将如何编码正则表达式以匹配每一行,然后在这些行内每个学校,甚至可能吗?

【问题讨论】:

  • 我实际上正在使用 eclipse 搜索和替换。我的最终代码将在 ColdFusion 服务器上运行。
  • 你对找到的值做了什么?传递给函数?保存到数据库?扔掉它?

标签: regex eclipse multiline


【解决方案1】:

好吧,如果可以避免的话,我不会在 Eclipse 中这样做。如果您可以访问命令行,则可以使用以下 perl-one 衬垫:

perl -lanF"\t" -e $'print "else if (" . join(" OR ", map {"school IS \'$_\'"} @F) . ")"' input_file

为简单起见,此命令为所有行输出“else if”,包括第一行。您必须手动更改第一行。

顺便说一句,您说您的输入数据是一个 CSV 文件(逗号分隔值),但它看起来实际上是一个制表符分隔的文件。我的解决方案仅适用于以制表符分隔的文件作为输入。

【讨论】:

  • 对不起,它实际上是一个制表符分隔的文件。
【解决方案2】:

我不确定你想用你的正则表达式做什么。

我会这样做,因为这是一次性工作,搜索替换分三个步骤。我不知道 eclipse 能做什么,但应该也能做到。

  1. 步骤:在每一行的开头插入“else if(school IS '”。对于第一行,手动完成。

  2. 步骤:将“”(5 个空格,如上例所示)替换为“' OR school IS '”

  3. 步骤:在每一行末尾插入“')”

【讨论】:

    【解决方案3】:

    不太确定您要做什么...您是否正在寻找代码来为您构建巨大的 if 块?如果是这样,这里有一些(假)代码,基于 Java:

    Pattern p = "([a-z-A-Z\s\.]+)"; // School names - adjust the pattern as neeeded
    String ifBlock;
    for (i = 0; i < data.lineCount; i++)                  // Lines in a file
      String schools = '';
      while (p.find())                                    // School name in a line
        schools += "school IS " + match + " OR ";
      end
      if (school.length > 0)
        school = school.substring(0, school.length - 3);  // trim the trailing 'OR'
      ifBlock += "else if(" + school + ") { \n <<EXECUTION CODE>> \n }"; // add to block
    end
    if (ifBlock.length > 0)
      ifBlock = ifBlock.substring(5);                     //Remove leading 'else'
    

    【讨论】:

    • 不确定 Bart 在这里改变了什么......无论如何,我想说我也更喜欢为每一行构建一个 Set 的方法,然后使用 if (theSet.contains(theItem)) 编辑:没关系,我明白了现在。谢谢巴特!
    猜你喜欢
    • 1970-01-01
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    • 1970-01-01
    相关资源
    最近更新 更多