Python:匹配双引号和括号内的字符串

时间:2010-07-13 04:03:36

标签: python regex match regex-group

我想通过使用正则表达式将双引号和括号内的文本匹配为两组,我该怎么做?

“作為”(act) ,用於罪行或民事過失時,包括一連串作為、任何違法的不作為和一連串違法的不作為;
“行政上訴委員會”(Administrative Appeals Board) 指根據《行政上訴委員會條例》(第442章)設立的行政上訴委員會;(由1994年第6號第32條增補)
“成人”、“成年人”(adult)* 指年滿18歲的人; (由1990年第32號第6條修訂)
“飛機”、“航空器”(aircraft) 指任何可憑空氣的反作用而在大氣中獲得支承力的機器;
“外籍人士”(alien) 指並非中國公民的人;  (由1998年第26號第4條增補)
“修訂”(amend) 包括廢除、增補或更改,亦指同時進行,或以同一條例或文書進行上述全部或其中任何事項;  (由1993年第89號第3條修訂)
“可逮捕的罪行”(arrestable offence) 指由法律規限固定刑罰的罪行,或根據、憑藉法例對犯者可處超過12個月監禁的罪行,亦指犯任何這類罪行的企圖;  (由1971年第30號第2條增補)
“《基本法》”(Basic Law) 指《中華人民共和國香港特別行政區基本法》;  (由1998年第26號第4條增補)
“行政長官”(Chief Executive) 指─

成为

      作為                 act
      行政上訴委員會        Administrative Appeals Board
      成人, 成年人         adult
      飛機, 航空器         aircraft
      外籍人士             alien
      修訂                 amend

请帮帮我,谢谢。

4 个答案:

答案 0 :(得分:1)

>>> import re
>>> s = u"""“作為”(act) ,用於罪行或民事過失時,包括一連串作為、任何違法的不作為和一連串違法的不作為;
    “行政上訴委員會”(Administrative Appeals Board) 指根據《行政上訴委員會條例》(第442章)設立的行政上訴委員會;(由1994年第6號第32條增補)
    “成人”、“成年人”(adult)* 指年滿18歲的人;  (由1990年第32號第6條修訂)
    “飛機”、“航空器”(aircraft) 指任何可憑空氣的反作用而在大氣中獲得支承力的機器;
    “外籍人士”(alien) 指並非中國公民的人;  (由1998年第26號第4條增補)
    “修訂”(amend) 包括廢除、增補或更改,亦指同時進行,或以同一條例或文書進行上述全部或其中任何事項;  (由1993年第89號第3條修訂)
    “可逮捕的罪行”(arrestable offence) 指由法律規限固定刑罰的罪行,或根據、憑藉法例對犯者可處超過12個月監禁的罪行,亦指犯任何這類罪行的企圖;  (由1971年第30號第2條增補)
    “《基本法》”(Basic Law) 指《中華人民共和國香港特別行政區基本法》;  (由1998年第26號第4條增補)
    “行政長官”(Chief Executive) 指─"""
>>> for x,y in re.findall(u"“(.*?)”\((.*?)\)",s):
...     print x, y
... 
作為 act
行政上訴委員會 Administrative Appeals Board
成年人 adult
航空器 aircraft
外籍人士 alien
修訂 amend
可逮捕的罪行 arrestable offence
《基本法》 Basic Law
行政長官 Chief Executive

如果要在程序中使用它,则应使用

# -*- coding: utf-8 -*-

位于文件顶部,因此正确解释了

答案 1 :(得分:0)

您想使用正则表达式的组功能:

import re
myRegExp = re.compile('"(?P<val1>.*?)".*?\((?P<val2>.*?)\)')
myRegExp.finall(YourStringHere)

答案 2 :(得分:0)

要匹配多个定义,您需要多个正则表达式。

# Assume Python 3.x. Use u'...' instead of '...' for Python 2.x.
import re
collector_re = re.compile('((?:“[^”]+”、?)+)\\(([^)]+)\\)')
splitter_re = re.compile('“([^”]+)”')

def find_all_definitions(text):
    def_pairs = collector_re.finditer(text)
    for match in def_pairs:
        (chinese, english) = match.groups()
        terms = splitter_re.findall(chinese)
        yield (terms, english)

用法:

text = '''“作為”(act) ,用於罪行或民事過失時,包括一連串作為、任何違法的不作為和一連串違法的不作為;
“行政上訴委員會”(Administrative Appeals Board) 指根據《行政上訴委員會條例》(第442章)設立的行政上訴委員會;(由1994年第6號第32條增補)
“成人”、“成年人”(adult)* 指年滿18歲的人; (由1990年第32號第6條修訂)
“飛機”、“航空器”(aircraft) 指任何可憑空氣的反作用而在大氣中獲得支承力的機器;
“外籍人士”(alien) 指並非中國公民的人;  (由1998年第26號第4條增補)
“修訂”(amend) 包括廢除、增補或更改,亦指同時進行,或以同一條例或文書進行上述全部或其中任何事項;  (由1993年第89號第3條修訂)
“可逮捕的罪行”(arrestable offence) 指由法律規限固定刑罰的罪行,或根據、憑藉法例對犯者可處超過12個月監禁的罪行,亦指犯任何這類罪行的企圖;  (由1971年第30號第2條增補)
“《基本法》”(Basic Law) 指《中華人民共和國香港特別行政區基本法》;  (由1998年第26號第4條增補)
“行政長官”(Chief Executive) 指─'''

for terms, english in find_all_definitions(text):
    print (', '.join(terms), "\t", english)

答案 3 :(得分:0)

如果你想要两个中文短语(如成人和飞机),你需要更加努力。下面的代码适用于Python 3.x。

#coding: utf8
import re
s = """“作為”(act) ,用於罪行或民事過失時,包括一連串作為、任何違法的不作為和一連串違法的不作為;
    “行政上訴委員會”(Administrative Appeals Board) 指根據《行政上訴委員會條例》(第442章)設立的行政上訴委員會;(由1994年第6號第32條增補)
    “成人”、“成年人”(adult)* 指年滿18歲的人;  (由1990年第32號第6條修訂)
    “飛機”、“航空器”(aircraft) 指任何可憑空氣的反作用而在大氣中獲得支承力的機器;
    “外籍人士”(alien) 指並非中國公民的人;  (由1998年第26號第4條增補)
    “修訂”(amend) 包括廢除、增補或更改,亦指同時進行,或以同一條例或文書進行上述全部或其中任何事項;  (由1993年第89號第3條修訂)
    “可逮捕的罪行”(arrestable offence) 指由法律規限固定刑罰的罪行,或根據、憑藉法例對犯者可處超過12個月監禁的罪行,亦指犯任何這類罪行的企圖;  (由1971年第30號第2條增補)
    “《基本法》”(Basic Law) 指《中華人民共和國香港特別行政區基本法》;  (由1998年第26號第4條增補)
    “行政長官”(Chief Executive) 指─"""
for zh1, zh2, en in re.findall(r"“([^”]*)”(?:、“([^”]*)”)?\((.*?)\)",s):
    print(ascii((zh1, zh2, en)))

导致:

('\u4f5c\u70ba', '', 'act')
('\u884c\u653f\u4e0a\u8a34\u59d4\u54e1\u6703', '', 'Administrative Appeals Board')
('\u6210\u4eba', '\u6210\u5e74\u4eba', 'adult')
('\u98db\u6a5f', '\u822a\u7a7a\u5668', 'aircraft')
('\u5916\u7c4d\u4eba\u58eb', '', 'alien')
('\u4fee\u8a02', '', 'amend')
('\u53ef\u902e\u6355\u7684\u7f6a\u884c', '', 'arrestable offence')
('\u300a\u57fa\u672c\u6cd5\u300b', '', 'Basic Law')
('\u884c\u653f\u9577\u5b98', '', 'Chief Executive')
相关问题