【问题标题】:Find text bounded by '&' symbol [closed]查找以“&”符号为界的文本[关闭]
【发布时间】:2014-11-11 15:55:34
【问题描述】:

例子

x='RTRV:&PM_DICT[&PM_LIST&:&PM_LIST&]&'

生成如下数据的正则表达式是什么?

PM_DICT[
PM_LIST
PM_LIST
]

“&”符号内的所有文本。

【问题讨论】:

  • 为什么排除:
  • 你已经尝试了什么?为什么它不起作用?
  • 你为什么要回复@falsetru 的编辑?它更干净。我恢复了。

标签: python regex


【解决方案1】:
x='RTRV:&PM_DICT[&PM_LIST&:&PM_LIST&]&'
>>> x.split("&")[1:]
['PM_DICT[', 'PM_LIST', ':', 'PM_LIST', ']', '']

或删除空项

>>> filter(lambda i: len(i) > 0, x.split("&")[1:])
['PM_DICT[', 'PM_LIST', ':', 'PM_LIST', ']']

: 在您的问题中神秘消失。它去哪儿了?可能是filter

>>> forbidden_items = set(["", ":", "RTRV:"])
>>> filter(lambda i: i not in forbidden_items, x.split("&"))
['PM_DICT[', 'PM_LIST', 'PM_LIST', ']']

【讨论】:

  • 应该是[1:-1]。否则包括& 之后的部分。
  • 问题多于答案。正如你所说,“:”呢?
  • 过滤空字符串是不够的。想想x = 'RTRV:&PM_DICT[&PM_LIST&:&PM_LIST&]&THIS_SHOULD_BE_EXLUDED'
  • 我添加了一个过滤器。对于一个花费很少的问题来说,这太过分了。
【解决方案2】:
>>> x
'RTRV:&PM_DICT[&PM_LIST&:&PM_LIST&]&'
>>> re.split('&',x)[1:]
['PM_DICT[', 'PM_LIST', ':', 'PM_LIST', ']', '']
>>> x.split('&')[1:]
['PM_DICT[', 'PM_LIST', ':', 'PM_LIST', ']', '']

【讨论】:

  • 这基本上是我的答案的副本。
  • 如果你觉得它被复制了,你可以投反对票。那里还有一个正则表达式。
  • 我认为您没有复制粘贴它(我将其编辑为“复制”)。只是没有充分的理由使用re 库。
猜你喜欢
  • 1970-01-01
  • 2012-03-05
  • 1970-01-01
  • 2012-02-05
  • 1970-01-01
  • 1970-01-01
  • 2013-03-07
  • 1970-01-01
  • 2013-02-27
相关资源
最近更新 更多