正则表达式未从所有字段中获取正确的值

时间:2015-07-29 03:40:50

标签: java regex selenium

我需要从PDF文件中获取数据并将其用作测试数据,以使用Selenium Webdriver测试应用程序。

我将pdf数据存储在一个变量中并逐个获取所需的数据。

现在我面临的问题是,在该文件中,下面的数据可以多次,只有粗体数据会发生变化。我需要获取那些大胆的值。

航空公司记录定位器 JUI1244

航空公司 XXX航空公司

航班 HU124

原产地 CCC CST机场

目的地 XXX YYY,国际

离开 07:35 PM

抵达 2015年10月24日上午09:20

出发终端C

抵达 1号航站楼

我尝试使用Substring来获取值,但它总是给我第一个实例值。所以,我尝试使用正则表达式,并能够使用以下正则表达式获得“航空公司记录定位器”行值

 Matcher m1 = Pattern.compile("(?m)(?:^Airline Record Locator )([a-zA-Z]+([0-9]+).*)").matcher(data);
while(m1.find()) {
        System.out.println(m1.group(1));
}

以上正则表达式无法从“航空公司”行获取数据,因此我使用了以下正则表达式。

 Pattern.compile("(?m)(?:^Airline )([A-Z]*.*?[a-z]$)").matcher(data); 

但是上述正则表达式代码都没有从其他字段中获取值,例如“离开”,“到达终端”,“离开终端”等行数据。

我的问题

  1. 如何从上述字段“离开”,“到达终端”,“离开终端”等获取值?
  2. 我是否需要使用不同的正则表达式模式来获取不同字段的值?或者有什么方法可以使用单个正则表达式模式从所有行获取数据(显然字符串可以不同但我们可以使用相同的正则表达式模式)吗?
  3. 我是Regex的新手,感谢任何帮助。感谢。

2 个答案:

答案 0 :(得分:1)

public static void test(String totalstring,String valueof){

        String arr[]=totalstring.split(valueof);

        System.out.println(arr[1].trim());

        }

//pass the line and the String for which u want the value ex : Depature
String totalstring ="Departure Terminal Terminal C";

String valueof="Departure";

test(totalstring,valueof);

希望这可以帮到你。如果你需要任何进一步的帮助,请回来

答案 1 :(得分:0)

我认为你可以通过regex使用这个解决方案:

/(.*?)((Airline Record Locator\s+(.*))|(Airline\s+(.*))|(Flight\s+(.*))|(Origin\s+(.*))|(Destination\s+(.*))|(Departing\s+(.*))|(Arriving\s+(.*))|(Departure Terminal\s+(.*))|(Arrival Terminal\s+(.*)))\s*/ig

替换会为您提供\4\6\8,......和\20

等值

[Regex Demo]