【问题标题】:Python Tokenize Contractions using regexPython 使用正则表达式标记收缩
【发布时间】:2021-10-16 17:40:09
【问题描述】:

我厌倦了跟随 this question 创建一个将收缩与单词分开的正则表达式。

这是我的尝试:

 line = re.sub( r'\s|(n\'t)|\'m|(\'ll)|(\'ve)|(\'s)|(\'re)|(\'d)', r" \1",line) #tokenize contractions

但是,只有第一个匹配项被标记化。例如:should've can't mustn't we'll 更改为 should ca n't must n't we

【问题讨论】:

  • 无需使用\1 或用另一个括号包裹整个模式。要参考整场比赛,您只需要\g<0>

标签: python regex


【解决方案1】:

\1指的是第一个捕获组!

您可以将所有选项放在同一个捕获组中:

(n\'t|\'m|\'ll|\'ve|\'s|\'re|\'d)

查看演示 here

为了加深话题,我建议你阅读Parentheses for Grouping and Capturing

【讨论】:

  • 谢谢,但这完全消除了收缩,我想将它标记化(分开)
  • @M.A.G 你显然还是得换成r" \1"
  • 哦对了,我误删了。谢谢!
【解决方案2】:

另一个没有捕获组的变体在替换中使用完全匹配 \g<0>

使用多个单个字符 'm 's'd 可以使用字符类 '[msd] 缩短

注意\' 在用双引号引起来时不必转义。

n't|'(?:ll|[vr]e|[msd])

Regex demo

import re

line = "should've can't mustn't we'll"
line = re.sub(r"n't|'(?:ll|[vr]e|[msd])", r" \g<0>", line)
print(line)

输出

should 've ca n't must n't we 'll

【讨论】:

    猜你喜欢
    • 2015-03-19
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    • 2012-02-22
    • 2017-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多