我正在尝试解决此正则表达式问题:
import re
letters = "αΑβΒγΓδΔεΕϛϚϜϝζΖηΗθΘιΙυϒYκΚϡϠͲͳλΛωΩμΜτΤνΝξΞοΟσΣϹϲςπΠχΧϙϘϞϟρΡψΨφΦ"
c = '([%s]+) ([^\s]+) ([^\s%s]+)' % (letters, letters)
regex_word_strong_morph = re.compile(c)
verse = "βιβλος G976 G976 N-NSF γενεσεως G1078 N-GSF ιησου G2424 N-GSM χριστου G5547 N-GSM υιου G5207 N-GSM δαβιδ G1138 N-PRI υιου G5207 N-GSM αβρααμ G11 N-PRI"
regex_word_strong_morph.findall(verse)
输出:
[('βιβλος', 'G976', 'G976'),
('γενεσεως', 'G1078', 'N-GSF'),
('ιησου', 'G2424', 'N-GSM'),
('χριστου', 'G5547', 'N-GSM'),
('υιου', 'G5207', 'N-GSM'),
('δαβιδ', 'G1138', 'N-PRI'),
('υιου', 'G5207', 'N-GSM'),
('αβρααμ', 'G11', 'N-PRI')]
但第一项应该是:
('βιβλος', 'G976', 'G976', 'N-NSF')
我quess([^ \ s] +)应该是这样的:([^ \ s] +){1,2}但是它不太正确。如果只匹配三个项目,则可以在第四个索引上设置空单元格,例如:
('γενεσεως', 'G1078', 'N-GSF', '')
答案 0 :(得分:1)
您可以尝试:(请注意,我已选择将可能的空字段放在第三个位置)
#!/usr/bin/python
# -*- coding: utf-8 -*-
import re
pattern = u'([Ͱ-ϡ]+) ([A-Z0-9-]+)(?: ([A-Z0-9-]+))? ([A-Z0-9-]+)(?=\\s|$)'
regex_word_strong_morph = re.compile(pattern)
verse = u"βιβλος G976 G976 N-NSF γενεσεως G1078 N-GSF ιησου G2424 N-GSM χριστου G5547 N-GSM υιου G5207 N-GSM δαβιδ G1138 N-PRI υιου G5207 N-GSM αβρααμ G11 N-PRI"
print regex_word_strong_morph.findall(verse)
答案 1 :(得分:0)
试试这个:
>>> import re
>>> c = '([αΑβΒγΓδΔεΕϛϚϜϝζΖηΗθΘιΙυϒYκΚϡϠͲͳλΛωΩμΜτΤνΝξΞοΟσΣϹϲςπΠχΧϙϘϞϟρΡψΨφΦ]+.*?.-.{3})'
>>> regex_word_strong_morph = re.compile(c)
>>> verse = "βιβλος G976 G976 N-NSF γενεσεως G1078 N-GSF ιησου G2424 N-GSM χριστου G5547 N-GSM υιου G5207 N-GSM δαβιδ G1138 N-PRI υιου G5207 N-GSM αβρααμ G11 N-PRI"
正则表达式:
([αΑβΒγΓδΔεΕϛϚϜϝζΖηΗθΘιΙυϒYκΚϡϠͲͳλΛωΩμΜτΤνΝξΞοΟσΣϹϲςπΠχΧϙϘϞϟρΡψΨφΦ]+.*?.-.{3})