在Python中的括号内获取字符串

时间:2011-12-20 00:00:05

标签: python regex

我有一个示例字符串<alpha.Customer[cus_Y4o9qMEZAugtnW] active_card=<alpha.AlphaObject[card] ...>, created=1324336085, description='Customer for My Test App', livemode=False>

我只想要值cus_Y4o9qMEZAugtnW而不是card(在另一个[]内)

我怎样才能在Python中以最简单的方式做到这一点? 也许使用RegEx(我不擅长)?

7 个答案:

答案 0 :(得分:50)

怎么样:

import re

s = "alpha.Customer[cus_Y4o9qMEZAugtnW] ..."
m = re.search(r"\[([A-Za-z0-9_]+)\]", s)
print m.group(1)

对我来说这打印:

cus_Y4o9qMEZAugtnW

请注意,对re.search(...)的调用会找到与正则表达式的第一个匹配项,因此除非您再次重复搜索,否则它找不到[card]

编辑:这里的regular expression是一个python raw string literal,这基本上意味着不会将反斜杠视为特殊字符并传递给re.search()方法不变。正则表达式的parts为:

  1. \[匹配文字[字符
  2. (开始新群组
  3. [A-Za-z0-9_]是与任何字母(大写或小写),数字或下划线匹配的字符集
  4. +与前一个元素(字符集)匹配一次或多次。
  5. )结束了小组
  6. \]匹配文字]字符
  7. 编辑:正如D K指出的那样,正则表达式可以简化为:

    m = re.search(r"\[(\w+)\]", s)
    

    因为\w是一个特殊序列,与[a-zA-Z0-9_]的含义相同,具体取决于re.LOCALEre.UNICODE设置。

答案 1 :(得分:10)

这应该做的工作:

re.match(r"[^[]*\[([^]]*)\]", yourstring).groups()[0]

答案 2 :(得分:9)

您可以使用str.split来执行此操作。

s = "<alpha.Customer[cus_Y4o9qMEZAugtnW] active_card=<alpha.AlphaObject[card]\
 ...>, created=1324336085, description='Customer for My Test App',\
 livemode=False>"
val = s.split('[', 1)[1].split(']')[0]

然后我们有:

>>> val
'cus_Y4o9qMEZAugtnW'

答案 3 :(得分:3)

your_string = "lnfgbdgfi343456dsfidf[my data] ljfbgns47647jfbgfjbgskj"
your_string[your_string.find("[")+1 : your_string.find("]")]
礼貌:Regular expression to return text between parenthesis

答案 4 :(得分:1)

您也可以使用

re.findall(r"\[([A-Za-z0-9_]+)\]", string)

如果您想要找到许多事件。

另见更多信息: How can I find all matches to a regular expression in Python?

答案 5 :(得分:0)

您可以使用

import re

s = re.search(r"(\[.*?]", string)
print(s.group(0))

答案 6 :(得分:0)

这个怎么样?使用文件举例说明:

f = open('abc.log','r')
content = f.readlines()
for line in content:
    m = re.search(r"\[(.*?)\]", line)
    print m.group(1)
    

希望这会有所帮助:

Magic regex : \[(.*?)\]

说明:

\[ : [ 是一个元字符,如果您想按字面意思匹配它,则需要对其进行转义。

(.*?) :以非贪婪的方式匹配所有内容并捕获它。

\] : ] 是一个元字符,如果您想按字面意思匹配它,则需要对其进行转义。