3

我正在尝试在特定单词之前拆分 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)

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

4

4 回答 4

4

使用正则表达式来分割你的字符串似乎有点矫枉过正:字符串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']

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

于 2011-07-15T15:43:03.223 回答
2

你可以做["path:"+s for s in line.split("path:")[1:]]而不是使用正则表达式。(请注意,我们跳过第一个匹配项,它没有“路径:”前缀。

于 2011-07-15T15:06:36.430 回答
0
in_str = "路径:bte00250 丙氨酸、天冬氨酸和谷氨酸代谢路径:bte00330 精氨酸和脯氨酸代谢"
in_list = in_str.split('路径:')
打印 ",path:".join(in_list)[1:]
于 2011-07-15T15:10:40.697 回答
0

这可以在没有正则表达式的情况下完成。给定一个字符串:

s = "path:bte00250 Alanine, aspartate ... path:bte00330 Arginine and ..."

我们可以用占位符临时替换所需的单词。占位符是一个单一的字符,我们用它来分割:

word, placeholder = "path:", "|"
s = s.replace(word, placeholder).split(placeholder)
s
# ['', 'bte00250 Alanine, aspartate ... ', 'bte00330 Arginine and ...']

现在字符串被拆分了,我们可以使用列表推导将原始单词重新连接到每个子字符串:

["".join([word, i]) for i in s if i]
# ['path:bte00250 Alanine, aspartate ... ', 'path:bte00330 Arginine and ...']
于 2017-08-24T06:56:11.517 回答