gpt4 book ai didi

python - 解析具有各种特殊字符的消息并拆分为列表(re 和 regex)Python 2.7

转载 作者:太空宇宙 更新时间:2023-11-04 05:52:03 24 4
gpt4 key购买 nike

我正在尝试解析接收以下定界符(不带引号)的消息:

  • 分隔符 1:“@@@” - 后跟一条消息
  • 定界符 2:“!!!” - 一个信号
  • 分隔符 3:“---” - 后跟一条消息
  • 分隔符 4:“###”- 后跟一条消息
  • 定界符 5:“$$$” - 后跟一条消息

我到目前为止:

import re
mystring = '@@@useradd---userfirstadded###userremoved!!!$$$message'
result = re.split('\\@\@\@|\\!\!\!|\\---|\\#\#\#|\\$\$\$',mystring)
print result

到目前为止我的结果:

['', 'useradd', 'userfirstadded', 'userremoved', '', 'message']

我想将结果打印到控制台:

['@@@useradd','---userfirstadded','###userremoved','!!!','$$$message']

这可以使用 re.split 还是我需要使用 re.find 或更好的东西?如您所见,我一直在使用 re.split 定界符,但也许你们在 python 中使用此功能有更多经验。

已编辑解决方案 #1 使用 re(来自@thefourtheye):

代码如下:

import re   
mystring = '@@@useradd---userfirstadd%ed###this is my username@!!!$$$hey whats up how are you??@@@useradd$$$This is my email @gmail.com!!!'
result = re.findall(r'!!!|(?:@|-|#|\$){3}[\w ^]+', mystring)
print result

打印结果如下:

['@@@useradd', '---userfirstadd', '###this is my username', '!!!', '$$$hey whats up how are you', '@@@useradd', '$$$This is my email ', '!!!']

已编辑新规范:

一切都按照上面指定的方式工作,更多的是使用@thefourtheye 建议的下面的答案。如果该函数可能有更多功能,比如允许一个或两个分隔符或更多,那会更好,就好像用户想在消息中键入他的电子邮件地址一样,他会使用 @ 符号或美元金额和 $等。如果这不可能,我总是可以在消息或不同类型的消息中使用分隔符在分隔符之前和之后添加空格,或者可能 @@@ 来分隔分隔符。你有什么建议?

总结:我想添加接受所有字符的功能,直到准确命中定界符模式(即 @@@)否则接受每个可能的字符,包括字符串中定界符模式中的字符(即 @@@ 不会拆分字符串)这可能吗?

已编辑解决方案#2 使用正则表达式(来自@hwnd):

如果您正在使用 Python 2.7,Regex 不会安装到它。您需要下载并安装此软件包。这些是我采取的明确指示,因此您也可以这样做。

  1. 转到 https://pypi.python.org/pypi/regex在页面底部有下载链接。对于运行 Python 2.7 的 Windows 操作系统,单击 regex-2015.03.18-cp27-none-win32.whl(否则请尝试其他操作系统,直到成功安装为止)。
  2. 浏览到您刚刚下载的 .whl 文件的下载目录。 Shift+右键单击该目录中的任意位置,然后单击“在此处打开命令窗口”,然后键入“pip install regex-2015.03.18-cp27-none-win32.whl”,应该会显示“安装成功!”
  3. 您现在可以使用正则表达式了!

代码如下:

import regex    
mystring = '@@@useradd---userfirstadd%ed###this is my username@!!!$$$hey whats up how are you??@@@useradd$$$This is my email @gmail.com!!!'
result = filter(None, regex.split(r'(?V1)(!!!)|\s*(?=(?:@|\$|#|-){3})', mystring))
print result

打印结果如下:

['@@@useradd', '---userfirstadd%ed', '###this is my username@', '!!!', '$$$hey whats up how are you??', '@@@useradd', '$$$This is my email @gmail.com', '!!!']

最佳答案

编辑:由于您想保留模式定界符之间的所有字符,您可以使用 regex 来完成此操作模块,拆分为“!!!”并对其他零宽度匹配使用前瞻。

>>> import regex
>>> s = '@@@useradd---userfirstadd%ed###this is my username@!!!$$$hey whats up how are you??@@@useradd$$$This is my email @gmail.com!!!'
>>> filter(None, regex.split(r'(?V1)(!!!)|\s*(?=(?:@|\$|#|-){3})', s))
['@@@useradd', '---userfirstadd%ed', '###this is my username@', '!!!', '$$$hey whats up how are you??', '@@@useradd', '$$$This is my email @gmail.com', '!!!']

关于python - 解析具有各种特殊字符的消息并拆分为列表(re 和 regex)Python 2.7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29812013/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com