Преобразование регулярных выражений в нижнем регистре в верхний регистр [дубликат]

Похожие вопросы как: pandas: Как разделить текст в столбце на несколько строк?

Вы могли бы сделать:

>> a=pd.DataFrame({"var1":"a,b,c d,e,f".split(),"var2":[1,2]})
>> s = a.var1.str.split(",").apply(pd.Series, 1).stack()
>> s.index = s.index.droplevel(-1)
>> del a['var1']
>> a.join(s)
   var2 var1
0     1    a
0     1    b
0     1    c
1     2    d
1     2    e
1     2    f

17
задан Jordan Reiter 20 January 2012 в 00:44
поделиться

5 ответов

Вы можете передать функцию re.sub() , которая позволит вам это сделать, вот пример:

 def upper_repl(match):
     return 'GOO' + match.group(1).upper() + 'GAR'

И пример ее использования:

 >>> re.sub(r'foo([a-z]+)bar', upper_repl, 'foobazbar')
 'GOOBAZGAR'
27
ответ дан Andrew Clark 24 August 2018 в 02:15
поделиться

Для тех, кто сталкивается с этим в google ...

Вы также можете использовать re.sub для соответствия повторяющимся шаблонам. Например, вы можете преобразовать строку с пробелами в camelCase:

def to_camelcase(string):
  string = string[0].lower() + string[1:]  # lowercase first
  return re.sub(
    r'[\s]+(?P<first>[a-z])',              # match spaces followed by \w
    lambda m: m.group('first').upper(),    # get following \w and upper()
    string) 

to_camelcase('String to convert')          # --> stringToConvert
1
ответ дан delgadom 24 August 2018 в 02:15
поделиться

Вы можете использовать некоторые вариации этого:

s = 'foohellobar'
def replfunc(m):
     return m.groups()[0]+m.groups()[1].upper()+m.groups()[2]
re.sub('(foo)([a-z]+)(bar)',replfunc,s)

дает выход:

'fooHELLObar'
3
ответ дан highBandWidth 24 August 2018 в 02:15
поделиться

Если у вас уже есть заменяющая строка (шаблон), вы не можете быть заинтересованы в ее замене с многословием m.group(1)+...+m.group(2)+...+m.group(3) ... Иногда приятно иметь аккуратную небольшую строку.

Вы можете использовать функцию MatchObject expand () для оценки шаблона для совпадения таким же образом, как sub () , что позволяет сохранить как можно больше ваш оригинальный шаблон, насколько это возможно. Вы можете использовать upper в соответствующих фрагментах.

re.sub(r'foo([a-z]+)bar', lambda m: 'GOO' + m.expand('\1GAR').upper())

Хотя это не было бы особенно полезно в приведенном выше примере, и, хотя оно не помогает при сложных обстоятельствах, оно может быть более удобным для более длинных выражения с большим количеством захваченных групп, такие как регулярное выражение для цензурирования MAC-адресов, где вы просто хотите, чтобы полная замена была заглавной или нет.

2
ответ дан it4qfixmqy 24 August 2018 в 02:15
поделиться

Вы имеете в виду что-то вроде этого?

>>>x = "foo spam bar"
>>>re.sub(r'foo ([a-z]+) bar', lambda match: r'foo {} bar'.format(match.group(1).upper()), x)
'foo SPAM bar'

Для справки, вот ссылка docstring re.sub (выделение мое).

Вернуть строку, полученную путем замены крайних левых неперекрывающихся вхождений шаблона в строке заменяющим repl. repl может быть либо строкой, либо вызываемой; если строка, обратная косая черта в ней обрабатывается. Если он является вызываемым, он передает объект соответствия и должен возвращать заменяющую строку, которая будет использоваться.

7
ответ дан wim 24 August 2018 в 02:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: