python - 从模式中解析出元素

标签 python regex

我正在尝试解析自然语言解析器(斯坦福解析器)的结果输出。 部分结果如下:

dep(Company-1, rent-5')
conj_or(rent-5, share-10)
amod(information-12, personal-11)
prep_about(rent-5, you-14)
amod(companies-20, non-affiliated-19)
aux(provide-23, to-22)
xcomp(you-14, provide-23)
dobj(provide-23, products-24)
aux(requested-29, 've-28)

我试图得到的结果是:

['dep', 'Company', 'rent']
['conj_or', 'rent', 'share']
['amod', 'information', 'personal']
...
['amod', 'companies', 'non-affiliated']
...
['aux', 'requested', "'ve"]

首先我尝试直接取出这些元素,但失败了。 然后我意识到正则表达式应该是正确的前进方向。

但是,我对正则表达式完全不熟悉。经过一番探索,我得到了:

m = re.search('(?<=())\w+', line)
m2 =re.search('(?<=-)\d', line)

然后卡住了。

第一个可以正确获取第一个元素,例如'dep''amod''conj_or',但我实际上还没有完全弄清楚它为什么起作用......

第二行试图获取第二个元素,例如'公司''租金''信息',但我只能获取单词后面的数字。我不知道如何向前看而不是向后看......

顺便说一句,我也不知道如何处理'non-affiliated'“'ve”等异常。

任何人都可以提供一些提示或帮助吗?高度赞赏。

最佳答案

在不知道可能输出的全部范围的情况下很难给出最佳答案,但是,这是一个可能的解决方案:

>>> [re.findall(r'[A-Za-z_\'-]+[^-\d\(\)\']', line) for line in s.split('\n')]
[['dep', 'Company', 'rent'], 
 ['conj_or', 'rent', 'share'], 
 ['amod', 'information', 'personal'], 
 ['prep_about', 'rent', 'you'], 
 ['amod', 'companies', 'non-affiliated'], 
 ['aux', 'provide', 'to'], 
 ['xcomp', 'you', 'provide'], 
 ['dobj', 'provide', 'products'], 
 ['aux', 'requested', "'ve"]]

它的工作原理是查找所有连续字母组([A-Za-z] 表示大写 A 和 Z 以及小写 a 和 z 之间的间隔)或字符“_”和“'”在同一行。

此外,它强制执行以下规则:匹配的字符串不得在最后位置包含给定的字符列表([^...] 的语法是“不得包含任何字符(将“...”替换为字符列表)。

字符 \ 对“(”或“)”等字符进行转义,否则这些字符将被正则表达式引擎解析为指令。

最后,s 是您在问题中给出的示例字符串...

呵呵!

关于python - 从模式中解析出元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8220007/

相关文章:

python - 如何替换一列属性表中的值?

javascript - 如果有两个或多个重复字符,则返回 true

javascript - 匹配出现的字符的第一个字符(它们必须彼此相邻)

Java正则表达式检测SimpleDateFormat模式中的时区

python - Pandas 中的 "Must explicitly set engine if not passing in buffer or path for io"

python - 如何在Python中使用unicode字符串的正则表达式?

python - 一天总是 86,400 纪元秒长吗?

python - 从模块导入函数在 Python 中如何工作?

python - 单词不以数字开头

sql - SQL 中的字符串剪切