【问题标题】:Regular expression with Lao?正则表达式与老挝?
【发布时间】:2013-05-09 13:51:40
【问题描述】:

在 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”中的值。我该怎么办?

【问题讨论】:

  • @dda:我认为您不应该四处走动并重新格式化示例 HTML;特别是在文本区域内,空格很重要,您可以通过在以前没有的地方添加缩进和换行来更改内容。

标签: python regex unicode southeast-asian-languages


【解决方案1】:

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

from bs4 import BeautifulSoup

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

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

但是,Python re 模块在 Unicode 方面(目前)还没有那么强大。您的选择是使用正则表达式仅获取 0E80–0EFF 范围内的代码点,使用 unicodedata module 并过滤 unicode 代码点名称,或使用 regex library 仅匹配老挝字符。

  • 使用正则表达式:

    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))
    ຮັກມັກຫຼາຍຢາກໄດ້ຫຼາຍຢາກເຮັດຫຼາຍປະເພດຄໍາກໍາມະການອອກສຽງເລັຟຄວາມຮັກຄົນຮັກຄູ່ຮັກສິ່ງທີ່ເຈົ້າຮັກທີ່ຮັກເທັນນິດສູນຮັກຜູ້ໃດຜູ້ໜຶ່ງຮ່ວມປະເວນີປະເພດຄຳນາມການອອກສຽງເລັຟ
    

【讨论】:

  • 很好,但他想要only Lao Characters。我认为需要正则表达式?
  • 我真的不知道OP想要什么,但我认为这个答案是合理的。该文本仅使用老挝字符是没有意义的 - 还有空格和常用字符。
  • @Kent:我不能 100% 确定他只想要文本区域中的老挝 unicode 点; I just want a value in "textarea" tag.
  • @MartijnPieters 感谢您的提前,如果我需要“textarea”文本中的所有文本,先生,我该怎么办?
  • @FrankXayachack:这就是第一段代码的作用。在这种情况下,您可以忽略有关仅提取老挝代码点的其余部分。 soup.find('textarea', id='lao').string 为您提供带有 id="lao" 属性的文本区域内的所有文本。
猜你喜欢
  • 2010-09-12
  • 2011-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-04
  • 2017-12-18
  • 2017-09-27
相关资源
最近更新 更多