Python正则表达式匹配特定字符串和结束字符之间的字符串

标签 python regex match

我正在构建一个文件剥离器来构建配置报告,并且我有一个非常非常长的字符串作为我的基础数据。以下是其中的一小段,但它至少说明了我正在处理的内容。

代码段示例:DEFAULT_GATEWAY=192.168.88.1&DELVRY_AGGREGATION_INTERVAL0=1&DELVRY_AGGREGATION_INTERVAL1=1&DELVRY_SCHEDULE0=1&DELVRY_SNI0=192.168.88.158&DELVRY_USE_SSL_TLS1=0&

我将如何匹配以下内容:

between "DEFAULT_GATEWAY=" and "&"
between "DELVRY_AGGREGATION_INTERVAL0=" and "&"
between "DELVRY_AGGREGATION_INTERVAL1=" and "&"
between "DELVRY_SCHEDULE=" and "&"
between "DELVRY_SNI0=" and "&"
between "DELVRY_USE_SSL_TLS1=" and "&"

并用它构建一个字典,如下所示:

{"DEFAULT_GATEWAY":"192.168.88.1",
 "DELVRY_AGGREGATION_INTERVAL0":"1",
 "DELVRY_AGGREGATION_INTERVAL1":"1",
 "DELVRY_SCHEDULE0":"1",
 "DELVRY_SNI0":"0",
 "DELVRY_USE_SSL_TLS1":"0"}

最佳答案

这是一种方法。

In [1]: input = 'DEFAULT_GATEWAY=192.168.88.1&DELVRY_AGGREGATION_INTERVAL0=1&DELVRY_AGGREGATION_INTERVAL1=1&DELVRY_SCHEDULE0=1&DELVRY_SNI0=192.168.88.158&DELVRY_USE_SSL_TLS1=0&'

In [2]: input.split('&')
Out[2]: 
['DEFAULT_GATEWAY=192.168.88.1',
 'DELVRY_AGGREGATION_INTERVAL0=1',
 'DELVRY_AGGREGATION_INTERVAL1=1',
 'DELVRY_SCHEDULE0=1',
 'DELVRY_SNI0=192.168.88.158',
 'DELVRY_USE_SSL_TLS1=0',
 '']

In [3]: [keyval.split('=') for keyval in input.split('&') if keyval]
Out[3]: 
[['DEFAULT_GATEWAY', '192.168.88.1'],
 ['DELVRY_AGGREGATION_INTERVAL0', '1'],
 ['DELVRY_AGGREGATION_INTERVAL1', '1'],
 ['DELVRY_SCHEDULE0', '1'],
 ['DELVRY_SNI0', '192.168.88.158'],
 ['DELVRY_USE_SSL_TLS1', '0']]

In [4]: dict(keyval.split('=') for keyval in input.split('&') if keyval)
Out[4]: 
{'DEFAULT_GATEWAY': '192.168.88.1',
 'DELVRY_AGGREGATION_INTERVAL0': '1',
 'DELVRY_AGGREGATION_INTERVAL1': '1',
 'DELVRY_SCHEDULE0': '1',
 'DELVRY_SNI0': '192.168.88.158',
 'DELVRY_USE_SSL_TLS1': '0'}

注释

  1. 这是输入行
  2. & 拆分以获得键值对。请注意最后一个条目为空
  3. 用等号拆分每个条目,同时丢弃空条目
  4. 建立字典

另一个解决方案

In [8]: import urlparse

In [9]: urlparse.parse_qsl(input)
Out[9]: 
[('DEFAULT_GATEWAY', '192.168.88.1'),
 ('DELVRY_AGGREGATION_INTERVAL0', '1'),
 ('DELVRY_AGGREGATION_INTERVAL1', '1'),
 ('DELVRY_SCHEDULE0', '1'),
 ('DELVRY_SNI0', '192.168.88.158'),
 ('DELVRY_USE_SSL_TLS1', '0')]

In [10]: dict(urlparse.parse_qsl(input))
Out[10]: 
{'DEFAULT_GATEWAY': '192.168.88.1',
 'DELVRY_AGGREGATION_INTERVAL0': '1',
 'DELVRY_AGGREGATION_INTERVAL1': '1',
 'DELVRY_SCHEDULE0': '1',
 'DELVRY_SNI0': '192.168.88.158',
 'DELVRY_USE_SSL_TLS1': '0'}

关于Python正则表达式匹配特定字符串和结束字符之间的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28122524/

相关文章:

python - 如何正确保存和加载 numpy.array() 数据?

python - 通过子类化 `type` 类来实现类描述符

ruby - 正则表达式:如何在每个 "="之后匹配第二个空格

regex - Twitch TMI,提取所有用户

python - ctypes 为 c_ulong 重新实现 rshift

python - 调整大小时如何压缩hdf5文件?

python - 按字符拆分字符串,转义时除外

javascript正则表达式在char一次拆分匹配,而不是多个

function - XPATH匹配函数问题——有效但无效

regex - PowerShell -match 与 -like