我有一个示例字符串 <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()方法.正则表达式的部分是:
\[匹配文字[字符( 开始一个新的团体[A-Za-z0-9_] 是一个匹配任何字母(大写或小写),数字或下划线的字符集+ 匹配前一个元素(字符集)一次或多次.) 结束了小组\]匹配文字]字符编辑:正如DK指出的那样,正则表达式可以简化为:
m = re.search(r"\[(\w+)\]", s)
Run Code Online (Sandbox Code Playgroud)
因为这\w是一个特殊的序列,这意味着与[a-zA-Z0-9_]依赖re.LOCALE和re.UNICODE设置相同.
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)
您还可以使用
re.findall(r"\[([A-Za-z0-9_]+)\]", string)
Run Code Online (Sandbox Code Playgroud)
如果您想查找很多事件。
另请参阅: 如何在 Python 中找到与正则表达式的所有匹配项?
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)
| 归档时间: |
|
| 查看次数: |
117356 次 |
| 最近记录: |