正则表达式在括号之间返回文本

时间:2011-02-04 02:46:50

标签: python regex python-3.x

u'abcde(date=\'2/xc2/xb2\',time=\'/case/test.png\')'

我需要的只是括号内的内容。

7 个答案:

答案 0 :(得分:191)

如果您的问题真的很简单,那么您不需要正则表达式:

s[s.find("(")+1:s.find(")")]

答案 1 :(得分:46)

使用re.search(r'\((.*?)\)',s).group(1)

>>> import re
>>> s = u'abcde(date=\'2/xc2/xb2\',time=\'/case/test.png\')'
>>> re.search(r'\((.*?)\)',s).group(1)
u"date='2/xc2/xb2',time='/case/test.png'"

答案 2 :(得分:27)

如果你想找到所有出现的事情:

Template.foo.rendered = function() {
 Session.setDefault('highcharts', false);
 if (Session.get('highcharts') === false){
   if (Roles.userIsInRole(Meteor.user(), 'admin') === true && highcharts === false) {
      $.getScript('/javascripts/highcharts.min.js', function(){ 
      Session.set('highcharts', true);
        );
      }
    }
  }
};

Template.fooBar.rendered = function() {
 Session.setDefault('highcharts', false);
  if (Session.get('highcharts') === false) {
    if(Roles.userIsInRole(Meteor.user(), 'admin') === true && highcharts === false){
      $.getScript('/javascripts/highcharts.min.js', function(){ 
      Session.set('highcharts', true);
        );
      }
    }
  }
};

答案 3 :(得分:18)

基于tkerwin的回答,如果您碰巧有嵌套的括号,如

st = "sum((a+b)/(c+d))"

如果您需要在 第一个左括号 最后右括号之间取得所有内容,那么他​​的答案将无效strong>获取(a+b)/(c+d),因为从字符串的左侧查找搜索,并在第一个右括号处停止。

要解决此问题,您需要在操作的第二部分使用rfind,因此它将成为

st[st.find("(")+1:st.rfind(")")]

答案 4 :(得分:6)

import re

fancy = u'abcde(date=\'2/xc2/xb2\',time=\'/case/test.png\')'

print re.compile( "\((.*)\)" ).search( fancy ).group( 1 )

答案 5 :(得分:4)

contents_re = re.match(r'[^\(]*\((?P<contents>[^\(]+)\)', data)
if contents_re:
    print(contents_re.groupdict()['contents'])

答案 6 :(得分:0)

无需使用正则表达式...。 只需使用列表切片...

import pandas as pd

years = [2000,2001,2002]

# Read all CSV files
dfs = [pd.read_csv(f"newyork{year}.txt", header=None) for year in years]

# Insert column in the beginning
for i, df in enumerate(dfs):
   df.insert(0, 'year', years[i])

# Concatenate all
df = pd.concat(dfs)