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

use*_*563 26 python regex

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

我只想要值cus_Y4o9qMEZAugtnW和NOT card(在另一个里面[])

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

srg*_*erg 60

怎么样:

import re

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

对我来说这打印:

cus_Y4o9qMEZAugtnW
Run Code Online (Sandbox Code Playgroud)

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

编辑:这里的正则表达式是一个python 原始字符串文字,这基本上意味着反斜杠不被视为特殊字符,并且不会被传递给re.search()方法.正则表达式的部分是:

  1. \[匹配文字[字符
  2. ( 开始一个新的团体
  3. [A-Za-z0-9_] 是一个匹配任何字母(大写或小写),数字或下划线的字符集
  4. + 匹配前一个元素(字符集)一次或多次.
  5. ) 结束了小组
  6. \]匹配文字]字符

编辑:正如DK指出的那样,正则表达式可以简化为:

m = re.search(r"\[(\w+)\]", s)
Run Code Online (Sandbox Code Playgroud)

因为这\w是一个特殊的序列,这意味着与[a-zA-Z0-9_]依赖re.LOCALEre.UNICODE设置相同.

  • 为什么不用`\ w`替换`[A-Za-z0-9_]`? (5认同)
  • @user3015703 在字符集中,您不需要转义特殊字符,“-”或“]”除外。要包含破折号,您可以在其前面添加斜线,或者将其作为字符集中的第一个或最后一个字符。所以使用 '[A-Za-z0-9_+-]' 应该可以。请参阅[Python正则表达式语法文档](https://docs.python.org/3/library/re.html#regular-expression-syntax) (2认同)

red*_*dow 12

这应该做的工作:

re.match(r"[^[]*\[([^]]*)\]", yourstring).groups()[0]
Run Code Online (Sandbox Code Playgroud)


Dav*_*ber 10

你可以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]
Run Code Online (Sandbox Code Playgroud)

然后我们有:

>>> val
'cus_Y4o9qMEZAugtnW'
Run Code Online (Sandbox Code Playgroud)


Bra*_*ggs 5

您还可以使用

re.findall(r"\[([A-Za-z0-9_]+)\]", string)
Run Code Online (Sandbox Code Playgroud)

如果您想查找很多事件。

另请参阅: 如何在 Python 中找到与正则表达式的所有匹配项?


Oma*_*maL 5

your_string = "lnfgbdgfi343456dsfidf[my data] ljfbgns47647jfbgfjbgskj"
your_string[your_string.find("[")+1 : your_string.find("]")]
Run Code Online (Sandbox Code Playgroud)

礼貌:在括号之间返回文本的正则表达式


小智 5

您可以使用

import re

s = re.search(r"\[.*?]", string)
if s:
    print(s.group(0))
Run Code Online (Sandbox Code Playgroud)