正则表达式:使用“;”分隔的换行符搜索多个字符串

时间:2014-04-09 08:04:56

标签: regex

我有一个这样的字符串,用于描述结构化数据源:

 Header whocares;
 SampleTestPlan 2
   a b
   c d;
 Test abc;
 SampleTestPlan 3
   e f
   g h
   i l;
  Wafer 01;
  EndOfFile;

每个领域...... ...以“FieldName”开头 ......以“;”结尾 ......可能包含换行符

我需要用正则表达式找到重复两次的SampleTestPlan的值。所以... 第一个值是:

     2
   a b
   c d

第二个值是

     3
   e f
   g h
   i l

我用这样的搜索字符串进行了几次尝试:

/ SampleTestPlan( \ S) /克

/ SampleTestPlan ( \ S。); /克

/ SampleTestPlan(*); /克

但是我需要更好地理解正则表达式是如何工作的,因为我确实是他们的新手,我需要学习很多东西。

提前感谢任何可以帮助我的人!

Stefano,米兰,意大利

3 个答案:

答案 0 :(得分:2)

您可以使用以下正则表达式:

(?<=\w\b)[^;]+(?=;)

看到它正常工作here on regex101


工作原理:
它符合以下所有内容:

  • 前面有一系列字符:\w+
  • 后跟;
  • 包含除;(包括newline s)以外的任何内容(至少一个字符)。

例如,对于该输入:

 Header whocares;
 SampleTestPlan 2
   a b
   c d;
 Test abc;
 SampleTestPlan 3
   e f
   g h
   i l;
  Wafer 01;
  EndOfFile;

匹配 5 次:

whocares

然后:

     2  
   a b  
   c d

然后:

abc

然后:

     3  
   e f  
   g h  
   i l

然后:

01

答案 1 :(得分:1)

假设您的输入始终处于格式良好的样本状态,请尝试以下操作:

/SampleTestPlan(\s+\d+.*?);/sg

此处,/s修饰符表示Dot matches newline characters

你可以try this at online

答案 2 :(得分:0)

那将是/SameTestPlan([^;]+)/g[^abc]表示任何不是a,b或c的字符。