假设我有一个字符串'gfgfdAAA1234ZZZuijjk',我想提取'1234'部分。
我只知道在AAA之前的几个字符,以及在ZZZ之后的我感兴趣的部分1234。
使用sed,可以对字符串执行如下操作:
echo "$STRING" | sed -e "s|.*AAA\(.*\)ZZZ.*|\1|"
结果是1234。
如何在Python中做同样的事情?
假设我有一个字符串'gfgfdAAA1234ZZZuijjk',我想提取'1234'部分。
我只知道在AAA之前的几个字符,以及在ZZZ之后的我感兴趣的部分1234。
使用sed,可以对字符串执行如下操作:
echo "$STRING" | sed -e "s|.*AAA\(.*\)ZZZ.*|\1|"
结果是1234。
如何在Python中做同样的事情?
当前回答
使用sed,可以对字符串执行如下操作:
echo "$STRING" | sed -e "s|.*AAA\(.*\)ZZZ.*|\1|"
结果是1234。
你可以使用相同的正则表达式对re.sub函数做同样的事情。
>>> re.sub(r'.*AAA(.*)ZZZ.*', r'\1', 'gfgfdAAA1234ZZZuijjk')
'1234'
在基本sed中,捕获组由\(..\)表示,但在python中由(..)表示。
其他回答
在python中,可以使用正则表达式(re)模块中的findall方法从字符串中提取子字符串。
>>> import re
>>> s = 'gfgfdAAA1234ZZZuijjk'
>>> ss = re.findall('AAA(.+)ZZZ', s)
>>> print ss
['1234']
>>> s = 'gfgfdAAA1234ZZZuijjk'
>>> start = s.find('AAA') + 3
>>> end = s.find('ZZZ', start)
>>> s[start:end]
'1234'
然后,如果您愿意,也可以在re模块中使用regexp,但在您的情况下这不是必要的。
>>> s = '/tmp/10508.constantstring'
>>> s.split('/tmp/')[1].split('constantstring')[0].strip('.')
import re
print re.search('AAA(.*?)ZZZ', 'gfgfdAAA1234ZZZuijjk').group(1)
以防有人要做和我一样的事。我必须在一行中提取圆括号内的所有内容。例如,如果我有这样一句话,‘美国总统(巴拉克·奥巴马)会见了……,我只想得到“巴拉克·奥巴马”,这是解决方案:
regex = '.*\((.*?)\).*'
matches = re.search(regex, line)
line = matches.group(1) + '\n'
也就是说,你需要用斜杠\符号来阻止括号。尽管这是一个关于更多正则表达式的问题。
此外,在某些情况下,你可能会在正则表达式定义之前看到'r'符号。如果没有r前缀,你需要像在c中那样使用转义字符。这里有更多关于这个的讨论。