如何解决在分隔符旁边分割字符串
标题似乎有点奇怪,但这是输入和输出的示例
'425557: Slime Poudrin 425564: Slime Poudrin 425566: Slime Poudrin 425590: Slime Poudrin'
应该成为
['425557: Slime Poudrin','425564: Slime Poudrin','425566: Slime Poudrin','425590: Slime Poudrin']
不幸的是,id的范围可以从100000到500000,所以我无法按数字进行拆分,因此需要将其保留在输出中。我假设我可以在':'的左边分割6个字符,但是我不知道该怎么做或寻找解决方案。另外,如果有任何办法也可以用Enter分割多行文本,但是我发现的解决方案似乎仍然要求您逐行输入文本。不适用于数百行文字。 我认为有一种使用正则表达式拆分的方法,但我不太了解。
解决方法
您可以使用正则表达式拆分文本
import re
text = '425557: Slime Poudrin 425564: Slime Poudrin 425566: Slime Poudrin 425590: Slime Poudrin'
splited = re.findall("\d*\:[^\d]*",text)
print(splited)
输出:
['425557: Slime Poudrin ','425564: Slime Poudrin ','425566: Slime Poudrin ','425590: Slime Poudrin']
,
您可以按数字的第一个出现进行拆分。然后在最后删除空白。
import re
test_str = '425557: Slime Poudrin 425564: Slime Poudrin 425566: Slime Poudrin 425590: Slime Poudrin'
## splits your string by first occurrence of any digit 0-9
split_text = re.findall('\d*\D+',test_str)
final_split_text = [words.strip() for words in split_text]
输出:
['425557: Slime Poudrin','425564: Slime Poudrin','425566: Slime Poudrin','425590: Slime Poudrin']
,
一个更复杂的正则表达式,其前瞻性为负,以在下一个“ \ d +:”序列处停止,从而允许在字符串中使用中间数字(但不允许数字加冒号)。由于负前瞻仅适用于单个当前字符,因此将其包装在具有1个或多个匹配项的非捕获组中。
>>> import re
>>> text = "425557: Slime Poudrin 425564: Slime Poudrin 425566: Slime Poudrin 425590: Slime Poudrin 417766: Ysage [Ver. 2Y2D]'s scalp 425566: Slime Poudrin"
>>> re.findall(r"(\d+: (?:.(?!\d+:))+)",text2)
['425557: Slime Poudrin','425590: Slime Poudrin',"417766: Ysage [Ver. 2Y2D]'s scalp",'425566: Slime Poudrin']
,
您可以使用re.split
:
import re
s = '425557: Slime Poudrin 425564: Slime Poudrin 425566: Slime Poudrin 425590: Slime Poudrin'
rgx = r' +(?=\d{6}: )'
print re.split(rgx,s)
正则表达式显示为“匹配一个或多个空格,后跟六个数字,后跟一个冒号”。 (?=\d{6}: )
是正向超前。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。