字符串中的单独数字,但是当连续的'1'时,将它们分开
我认为必须有一个聪明的方法来解决这个问题。
s = 'NNNN1234N11N1N123'
预期结果是:
['1234','1','1','1','123']
答案 0 :(得分:2)
我认为您可以通过使用stream {
upstream syslog_standard {
zone syslog_zone 64k;
server cp01.woolford.io:1514 max_fails=1 fail_timeout=10s;
server cp02.woolford.io:1514 max_fails=1 fail_timeout=10s;
server cp03.woolford.io:1514 max_fails=1 fail_timeout=10s;
}
match syslog_ingest_test {
send "GET /connectors/syslog/status HTTP/1.0\r\nHost: localhost\r\n\r\n";
expect ~* "RUNNING";
}
server {
listen 514 udp;
proxy_pass syslog_standard;
proxy_bind $remote_addr transparent;
health_check match=syslog_ingest_test port=8073;
}
}
模块来解决
match=syslog_ingest_test
编辑:如@CrafterKolyan的注释中所建议,可以将正则表达式简化为re
。
输出
>>> import re
>>> re.findall('(?:1[2-90]+)|1', 'NNNN1234N11N1N123')
答案 1 :(得分:0)
我也将使用正则表达式(t'
模块),但使用以下其他功能,即re
:
re.split
说明:您想将import re
s = 'NNNN1234N11N1N123'
output = re.split(r'[^\d]+|(?<=1)(?=1)',s)
print(output) # ['', '1234', '1', '1', '1', '123']
output = [i for i in output if i] # jettison empty strs
print(output) # ['1234', '1', '1', '1', '123']
拆分成str
的{{1}}-这就是使用list
的目的。 str
的第一个参数用于告诉应该在哪里进行分割,如果不使用捕获组,则将匹配的所有内容都删除(类似于re.split
方法re.split
),因此我需要指定发生切割的两个位置,因此我使用了str
作为替代,并通知split
进行切割:
|
是1个或多个非数字re.split
为空[^\d]+
,其后是(?<=1)(?=1)
,后跟str
,这里我使用了名为零长度断言(两次)的功能请注意,1
在您想要的输出之前产生了1
(空re.split
),这意味着第一次切割(在这种情况下为''
)从{{ 1}}。这是str
的预期行为,尽管在这种情况下我们不需要该信息,因此我们可以抛弃我使用NNNN
理解的任何空str
。