将正则表达式模式转换为小写

时间:2016-04-18 05:45:08

标签: python regex xml

我有一些像这样的XML文本:

'Location of Template and Country
    Cntryloc = """" & Sheet1.Range("B5") & """"
    Debug.Print Cntryloc
    TempLoc = "" & Sheet1.Range("B11") & ""
    Finaltemplloc = Sheet1.Range("B17")

    i=2

   'Getting the name of excel Sheet
   CntryExcel = Sheet1.Range("C5")

   TempLoc = "" & Sheet1.Range("B11") & ""
   Workbooks.Open TempLoc & "\" & "Bank" & ".xlsx", True, False
   Workbooks("" & FName & ".xlsx").Activate
   ActiveWorkbook.Unprotect Password:="Tall.Trees"
   Worksheets("Template").Unprotect Password:="Tall.Trees"
   Worksheets("Template").Range("D14").Formula = "='&"["&CntryExcel&"]Dump"&"'"&"!"&"$A$" & i""
   ActiveWorkbook.BreakLink Name:=Cntryloc, Type:=xlExcelLinks
         Worksheets("Template").Protect Password:="Tall.Trees"
     ActiveWorkbook.Protect Password:="Tall.Trees"

    'Location for Final Output

    ActiveWorkbook.SaveAs Filename:=Finaltemplloc & "\" & Bank.xlsx
    ActiveWorkbook.Close

我希望text = '<sp> <speaker>T<seg rend="small">ARSIS</seg>. </speaker> <p>—Adelante, Señora. Gracias á la luz rosada, franquearemos sin tropezones este ingrato sendero.</p> </sp> <sp> <speaker>L<seg rend="small">A</seg> M<seg rend="small">ADRE</seg>. </speaker> <p>—La llovizna nos coge ahora de cara… Yo no la temo. Tengo mi rostro bien curtido para estas inclemencias que hacen á mis hijos duros, y tan insensibles al frío como al calor. Tú también te has endurecido, según veo, y te has dejado en los aires sutiles y en los ardores del sol tu antigua carita de galancete afeminado.</p>' 中的所有内容都变为小写,例如:

<seg rend="small">

我在Python中尝试过类似的不同变体:

 <sp> <speaker>T<seg rend="small">arsis</seg>. </speaker> <p>—Adelante, Señora. Gracias á la luz rosada, franquearemos sin tropezones este ingrato sendero.</p> </sp> <sp> <speaker>L<seg rend="small">a</seg> M<seg rend="small">adre</seg>. </speaker> <p>—La llovizna nos coge ahora de cara… Yo no la temo. Tengo mi rostro bien curtido para estas inclemencias que hacen á mis hijos duros, y tan insensibles al frío como al calor. Tú también te has endurecido, según veo, y te has dejado en los aires sutiles y en los ardores del sol tu antigua carita de galancete afeminado.</p> </sp> <sp> <speaker>T<seg rend="small">arsis</seg>. </speaker> <p>—En los días ásperos de la Aldehuela empecé á soltar mi máscara de cera, y cambié los goznes quebradizos de mi máquina corporal por otros de acero.</p> </sp> <sp> <speaker>L<seg rend="small">a</seg> M<seg rend="small">adre</seg>. </speaker> <p>—Al nombrar la Aldehuela traes á mi memoria algo que tenía que decirte, y es cosa en verdad lamentable. ¿Sabes que ha muerto el pobre José Caminero?</p> </sp>

但它不起作用,我得到像 for f in re.findall(r'<seg rend="small">([^<]*?)</seg>', text): text = text.replace(f, f.lower()) 这样奇怪的结果,不明白为什么。可以请任何人帮助我吗?提前谢谢!

2 个答案:

答案 0 :(得分:1)

首先,不要使用正则表达式解析HTML。话虽如此,您可以使用 lxml

from lxml import html

text = '<sp> <speaker>T<seg rend="small">ARSIS</seg>. </speaker> <p>—Adelante, Señora. Gracias á la luz rosada, franquearemos sin tropezones este ingrato sendero.</p> </sp> <sp> <speaker>L<seg rend="small">A</seg> M<seg rend="small">ADRE</seg>. </speaker> <p>—La llovizna nos coge ahora de cara… Yo no la temo. Tengo mi rostro bien curtido para estas inclemencias que hacen á mis hijos duros, y tan insensibles al frío como al calor. Tú también te has endurecido, según veo, y te has dejado en los aires sutiles y en los ardores del sol tu antigua carita de galancete afeminado.</p>'

tree = html.fromstring(text)
results = [x.lower() for x in tree.xpath('//seg[@rend="small"]/text()')]
print results

<强>输出:

['arsis', 'a', 'adre']

答案 1 :(得分:1)

您可以使用正则表达式。

>>> txt = 'foo <seg rend="small">ARSIS</seg> bar'
>>> import re
>>> re.sub(r'(<seg\s+rend\s*=\s*"small">)(.*?)(?=</seg>)', lambda m: m.group(1) + m.group(2).lower(), txt)
'foo <seg rend="small">arsis</seg> bar'
>>>