匹配不是按日期开头的行

时间:2019-04-05 16:02:50

标签: java regex regex-negation regex-lookarounds

我从pdf文件中提取了一些文本,我在寻找与工作职位相匹配的关键字,我尝试使用许多正则表达式来仅获取不是以日期开头的行(任何日期格式),但我必须获取以任何其他数字或单词开头的其他行。

我希望在这里找到一个聪明的主意。 最好

我已经尝试过这两个正则表达式来找到 ingenieur 关键字,但均未成功:


    ((?m)^(?![0-9])\\s*\\b"+ sTofind +"\\b)

这也是:


    ((?m)[^(?!(0-9))][\\s{2,4}]\\b"+ sTofind +"\\b.*)

我使用的文本测试就是这个测试(字符不是文本的一部分):

etudiant -: ingenieur etudes et developpement
http://www.doyoubuzz.com/profilen
experiences  
ingenieur
2018-2014      ingenieur 
331    ingenieur


29 rue de la terrasse    Ingenieur Centrale Lyon / Supélec 
93160 NOISY LE GRAND    ingenieur  
09 66 11 10 93       Expertise en instrumentation industrielle, 
06 44 25 90 09     automatisation ingenieur & marketing opérationnel 
email.email@wanadoo.fr   Bilingue anglais  ingenieur

我希望找到突出显示的文本:

etudiant -: <i>ingenieur etudes et developpement</i>
http://www.doyoubuzz.com/profilen
<i>experiences</i>
<i>ingenieur</i>
2018-2014      ingenieur 
331    <i>ingenieur</i>


29 rue de la terrasse    <i>Ingenieur Centrale Lyon / Supélec </i>
93160 NOISY LE GRAND    <i>ingenieur</i>  
09 66 11 10 93       Expertise en instrumentation industrielle, 
06 44 25 90 09     automatisation <i>ingenieur & marketing opérationnel </i>
email.email@wanadoo.fr   Bilingue anglais  <i>ingenieur</i>

1 个答案:

答案 0 :(得分:2)

您可以使用:

(?mi)^((?![0-9]+-[0-9]+).*?)(\bingenieur\b.*)

关于图案

  • (?mi)多行且不区分大小写的标志
  • ^字符串的开头
  • (捕获组
    • (?!负向前进,断言右边立即不存在
      • [0-9]+-[0-9]+匹配1个以上的数字,一个连字符和1个以上的数字
    • .*?结束否定查找并匹配除换行符非贪婪以外的任何字符
  • )关闭捕获组
  • (\bingenieur\b.*)捕获组,匹配单词边界之间的神经元直到字符串的结尾

您可以在代码中使用多行和不区分大小写的标志,例如:

String sTofind = "ingenieur";
String regex = "^((?!>[0-9]+-[0-9]+).*?)(\\b"+ sTofind + "\\b.*)";
String string = "...";
Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE | Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(string);
String result = matcher.replaceAll(subst);

Regex demo | Java demo

然后,如果您还想突出显示,则也可以用experiences代替工程师。

并替换为两个捕获组,您可以在其中突出显示第二个组:

$1<i>$2</i>