我有一个示例字符串<alpha.Customer[cus_Y4o9qMEZAugtnW] active_card=<alpha.AlphaObject[card] ...>, created=1324336085, description='Customer for My Test App', livemode=False>
我只想要值cus_Y4o9qMEZAugtnW
而不是card
(在另一个[]
内)
我怎样才能在Python中以最简单的方式做到这一点? 也许使用RegEx(我不擅长)?
答案 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为:
\[
匹配文字[
字符(
开始新群组[A-Za-z0-9_]
是与任何字母(大写或小写),数字或下划线匹配的字符集+
与前一个元素(字符集)匹配一次或多次。)
结束了小组\]
匹配文字]
字符编辑:正如D K指出的那样,正则表达式可以简化为:
m = re.search(r"\[(\w+)\]", s)
因为\w
是一个特殊序列,与[a-zA-Z0-9_]
的含义相同,具体取决于re.LOCALE
和re.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 : \[(.*?)\]
说明:
\[
: [
是一个元字符,如果您想按字面意思匹配它,则需要对其进行转义。
(.*?)
:以非贪婪的方式匹配所有内容并捕获它。
\]
: ]
是一个元字符,如果您想按字面意思匹配它,则需要对其进行转义。