我想将具有公共定界符的字符串拆分为两个单独的字符串。我不确定正则表达式是否是正确的选择,但.split, sep
似乎以单词为目标,而我的将总是与下面提供的有所不同。
我目前使用的方法的主要问题是,在之间没有分配名称时,我无法解释( )
。在没有(Name)
描述符的情况下,我仍然需要foo / foo [1]字符串。
我目前也没有)
在要保留的字符串中返回定界符。我应该创建两个re.groups然后进行拆分,还是有一种更简单的方法来实现呢?
样品弦
s1 = '(NTUSER.DAT) Checks for IOCs for Clampi (per Trend Micro)'
s2 = '(NTUSER.DAT) Autostart - get Command Processor\AutoRun value from NTUSER.DAT hive'
s3 = '(All) Parse hive, print deleted keys/values'
s4 = '(NTUSER.DAT;Software) Get IE Zone settings'
s5 = 'Gets users Startup Folder location'
所需的输出
'Name', 'Text' #E.g. (NTUSER.DAT), Checks for IOCs for Clampi (per Trend Micro)
我试过了
foo = re.compile("[)]").split(string) #this doesn't preserve the ")" on output
你可以这样
>>> foo = re.compile(r'(?<=^\(NTUSER\.DAT\)) |(?<=^\(All\)) |(?<=^\(NTUSER\.DAT;Software\)) |(?<=^\( \)) ')
不幸的是,Name
S IN(...)
你必须将它们全部手工用s,因为lookbehind
不允许使用量词。
>>> foo.split(s1)
['(NTUSER.DAT)', 'Checks for IOCs for Clampi (per Trend Micro)']
>>> foo.split(s2)
['(NTUSER.DAT)', 'Autostart - get Command Processor\\AutoRun value from NTUSER.DAT hive']
>>> foo.split(s3)
['(All)', 'Parse hive, print deleted keys/values']
>>> foo.split(s4)
['(NTUSER.DAT;Software)', 'Get IE Zone settings']
>>> foo.split('( ) abcde')
['( )', 'abcde']
无论如何,@ Andrea Corbellini已经提到过。如果使用match()
而不是则更加简单split()
。
例如
>>> foo = re.compile(r'^(\(.*?\)) (.*)$')
>>> result = foo.match(s1)
>>> result.group(1) + ', ' + result.group(2)
'(NTUSER.DAT), Checks for IOCs for Clampi (per Trend Micro)'
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句