通过排除非捕获组的重复单词来捕获单词

时间:2016-07-31 00:35:14

标签: regex regex-lookarounds regex-greedy

我想从下面的字符串中提取所有内容,但“from”“,来自”

  

来自古法语,来自拉丁语innocentia,来自无辜 - '不伤害'(基于nocere'伤害')。

这是我的正则表达式:

(?:from)(.*)(?:,.from)(.*)

对于此正则表达式,我会得到Old French, from Latin innocentiainnocent- ‘not harming’ (based on nocere ‘injure’).。如何编辑我的正则表达式片段,使其能够匹配预期的条件而不重复非捕获组(?:,.from)

结果应为:

  • Old French
  • Latin innocentia
  • innocent- ‘not harming’ (based on nocere ‘injure’).

2 个答案:

答案 0 :(得分:1)

line="from Old French, from Latin innocentia, from innocent- ‘not harming’ (based on nocere ‘injure’)."
line.split(/, from|from/)

=>

[ '',
 ' Old French',
 ' Latin innocentia',
 ' innocent- ‘not harming’ (based on nocere ‘injure’).' ]

哪个可能足够接近。 在线试用:https://repl.it/Chp8

答案 1 :(得分:0)

您可以使用正则表达式来拆分字符串。这将以比使用回溯噩梦.*更快的速度返回相同的结果。

你可以使用这个正则表达式(基于你的):

(,.)?from

可以找到有关拆分的更多信息here