正则表达式中的正则表达式

时间:2011-04-18 19:58:03

标签: regex eclipse multiline

我有一个客户端给我的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?)+$

那么使用那个基础我如何编写正则表达式以匹配每一行,然后在每个学校的那些行中,甚至可能?

3 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:0)

不确定你要做什么......你是否正在寻找代码来为你构建巨型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'

答案 2 :(得分:0)

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

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

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

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

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