Python - 正则表达式 - 在单词之前分割字符串

Dyn*_*yna 4 python regex string split splice

我试图在特定单词之前拆分 python 中的字符串。例如,我想在 之前分割以下字符串"path:"

  • 之前分割字符串"path:"
  • 输入:"path:bte00250 Alanine, aspartate and glutamate metabolism path:bte00330 Arginine and proline metabolism"
  • 输出:['path:bte00250 Alanine, aspartate and glutamate metabolism', 'path:bte00330 Arginine and proline metabolism']

我努力了

rx = re.compile("(:?[^:]+)")
rx.findall(line)
Run Code Online (Sandbox Code Playgroud)

这不会在任何地方分割字符串。问题在于,"path:"永远不会知道后面的值来指定整个单词。有谁知道如何做到这一点?

Adr*_*son 6

使用正则表达式来分割字符串似乎有点矫枉过正:字符串split()方法可能正是您所需要的。

无论如何,如果您确实需要匹配正则表达式来拆分字符串,则应该使用该re.split()方法,该方法根据正则表达式匹配来拆分字符串。

另外,使用正确的正则表达式进行分割:

>>> line = 'path:bte00250 Alanine, aspartate and glutamate metabolism path:bte00330 Arginine and proline metabolism'
>>> re.split(' (?=path:)', line)
['path:bte00250 Alanine, aspartate and glutamate metabolism', 'path:bte00330 Arginine and proline metabolism']
Run Code Online (Sandbox Code Playgroud)

(?=...)组是一个先行断言:表达式匹配一个空格(注意表达式开头的空格),后跟 string 'path:',而不消耗空格后面的内容。

  • 我不明白为什么正则表达式中需要空格。幸运的是,我的疑问得到了很好的答案[这里](http://stackoverflow.com/questions/6712855/two-very-close-regexes-with-lookahead-assertions-in-python-what-does-make-他们/6712917#6712917)。我怀疑有些人可能有同样的疑问,所以我在这里发布链接。 (3认同)