与老挝的正式表达?

时间:2013-05-09 13:51:40

标签: python regex unicode southeast-asian-languages

在Python中,我想在此HTML代码中仅显示老挝角色(仅在“textarea”标签中):

<font color="Red">ພິມຄໍາສັບລາວ ຫຼື ອັງກິດແລ້ວກົດປຸ່ມຄົ້ນຫາ - Enter English or Lao Then Hit Search</font><br />
<center><table id='display' border='0' width='100%'>
  <tr>
    <td id='lao2' colspan='3' style='height: 18px; text-align: left'>
      <span style='color: #660033'><span style='font-size: 12pt'>&nbsp;&nbsp;&nbsp;</span></span>&nbsp;&nbsp;
    </td>
  </tr>
  <tr>
    <td style='width: 120px'>&nbsp;</td>
    <td style='width: 192px'>
      <textarea ID='lao' Font-Name='Phetsarath OT' Font-Size='12' rows='10' cols='84' readonly='readonly'>
    1.  (loved, loving)
      1. ຮັກ
      2. ມັກຫຼາຍ
      3. would love ຢາກໄດ້ຫຼາຍ, ຢາກເຮັດຫຼາຍ
      ປະເພດ: ຄໍາກໍາມະ
      ການອອກສຽງ: ເລັຟ

    2.
      1. ຄວາມຮັກ
      2. ຄົນຮັກ, ຄູ່ຮັກ, ສິ່ງທີ່ເຈົ້າຮັກ
      3. ທີ່ຮັກ, (ເທັນນິດ) ສູນ
      be in love with ຮັກຜູ້ໃດຜູ້ໜຶ່ງ
      make love ຮ່ວມປະເວນີ
      ປະເພດ: ຄຳນາມ
      ການອອກສຽງ: ເລັຟ
      </textarea>
    </td>
    <td style='width: 284px'>&nbsp;&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td id='lao1' align='center'>ກະຊວງ ໄປສະນີ, ໂທລະຄົມມະນາຄົມ ແລະ ການສື່ສານ</td><td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td id='lao1' align='center'>ສູນບໍລິຫາລັດດ້ວຍເອເລັກໂຕຣນິກ</td><td>&nbsp;</td>
  </tr>
</table></center><br />

我只想要“textarea”中的值。我该怎么办?

1 个答案:

答案 0 :(得分:4)

不要使用正则表达式。使用HTML解析器。 BeautifulSoup使任务变得简单:

from bs4 import BeautifulSoup

soup = BeautifulSoup(htmltext)
text = soup.find('textarea', id='lao').string

如果您需要将结果限制为老挝字符,则可以进一步处理text变量。

然而,当涉及到Unicode时,Python re模块并不那么强大。您可以选择使用正则表达式来获取0E80-0EFF范围内的代码点,使用unicodedata module并过滤unicode代码点名称,或使用regex library仅匹配老挝字符。< / p>

  • 使用正则表达式:

    import re
    
    lao_codepoints = re.compile(ur'[\u0e80-\u0eff]', re.UNICODE)
    lao_text = u''.join(lao_codepoints.findall(text))
    

    演示:

    >>> print u''.join(lao_codepoints.findall(text))
    ຮັກມັກຫຼາຍຢາກໄດ້ຫຼາຍຢາກເຮັດຫຼາຍປະເພດຄໍາກໍາມະການອອກສຽງເລັຟຄວາມຮັກຄົນຮັກຄູ່ຮັກສິ່ງທີ່ເຈົ້າຮັກທີ່ຮັກເທັນນິດສູນຮັກຜູ້ໃດຜູ້ໜຶ່ງຮ່ວມປະເວນີປະເພດຄຳນາມການອອກສຽງເລັຟ
    
  • 使用unicodedata模块:

    import unicodedata
    
    loa_text = u''.join([ch for ch in text if unicodedata.name(ch, '').startswith('LAO')])
    

    演示:

    >>> print u''.join([ch for ch in text if unicodedata.name(ch, '').startswith('LAO')])
    ຮັກມັກຫຼາຍຢາກໄດ້ຫຼາຍຢາກເຮັດຫຼາຍປະເພດຄໍາກໍາມະການອອກສຽງເລັຟຄວາມຮັກຄົນຮັກຄູ່ຮັກສິ່ງທີ່ເຈົ້າຮັກທີ່ຮັກເທັນນິດສູນຮັກຜູ້ໃດຜູ້ໜຶ່ງຮ່ວມປະເວນີປະເພດຄຳນາມການອອກສຽງເລັຟ
    
  • 使用regex模块:

    import regex
    
    lao_codepoints = regex.compile(ur'\p{Lao}', regex.UNICODE)
    lao_text = u''.join(lao_codepoints.findall(text))
    

    演示:

    >>> print u''.join(lao_codepoints.findall(text))
    ຮັກມັກຫຼາຍຢາກໄດ້ຫຼາຍຢາກເຮັດຫຼາຍປະເພດຄໍາກໍາມະການອອກສຽງເລັຟຄວາມຮັກຄົນຮັກຄູ່ຮັກສິ່ງທີ່ເຈົ້າຮັກທີ່ຮັກເທັນນິດສູນຮັກຜູ້ໃດຜູ້ໜຶ່ງຮ່ວມປະເວນີປະເພດຄຳນາມການອອກສຽງເລັຟ