在 python 中保持双引号、单引号和撇号

Standarzing double quotes, single quotes and apostrophes in python

提问人:DanielTheRocketMan 提问时间:7/4/2020 更新时间:7/4/2020 访问量:1657

问:

由于我正在使用许多不同的字体,并且对每个符号都有特殊的处理,因此我想标准化文本字体中的所有引号和撇号条目。

我正在寻找与此条目类似的东西来跳过行

content=re.sub(r'\u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029]', '\n', content)

或连字符

content = regex.sub(r'\p{Pd}+', '-', content)

你可以帮我吗?

python-3.x 正则表达式 NLP 引用双 引号

评论

0赞 7/9/2020
你得到了你需要的帮助吗?因为我不记得你怎么能得到你问题的确切解决方案,但你@WiktorStribiżew标记为直接答案。但是正如我在回答中所说的那样,没有直接的解决方案,但你没有标记它。只是好奇你的想法是什么?
0赞 7/9/2020
我有工具可以给你提供具体的解决方案折衷方案,但你可能已经烧毁了那座桥。

答:

6赞 Wiktor Stribiżew 7/4/2020 #1

如果您使用 Uniview 工具,您可以搜索所有包含引用“单引号”、“双引号”、“撇号”的 Unicode 符号,例如

enter image description here

以下是一些经过修剪的输出:

单引号,[\u02BB\u02BC\u066C\u2018-\u201A\u275B\u275C](查看演示):

  • ʻ- 02BB修饰符字母变逗号
  • ʼ- 02BC 修饰符字母撇号
  • ٬- 066C 阿拉伯千位分离器
  • - 2018 左单引号
  • - 2019 右单引号
  • - 201A 单低 9 引号
  • - 275B重型单转逗号引号装饰
  • - 275C重型单逗号引号装饰

双引号,[\u201C-\u201E\u2033\u275D\u275E\u301D\u301E](查看演示):

  • - 201C 左双引号
  • - 201D 右双引号
  • - 201E 双低 9 引号
  • - 2033 双素数
  • - 275D重型双转逗号引号饰品
  • -275E重型双逗号引号装饰
  • -301D 反转双素数引号
  • - 301E 双素数引号

撇号, [\u0027\u02B9\u02BB\u02BC\u02BE\u02C8\u02EE\u0301\u0313\u0315\u055A\u05F3\u07F4\u07F5\u1FBF\u2018\u2019\u2032\uA78C\uFF07](见演示):

  • '- 0027 撇子
  • ʹ- 02B9 修饰符字母素数
  • ʻ- 02BB修饰符字母变逗号
  • ʼ- 02BC 修饰符字母撇号
  • ʾ- 02BE修饰字母右半环
  • ˈ- 02C8 修饰符字母垂直线
  • ˮ- 02EE修饰字母双撇号
  • ́ ‎- 0301 结合急性口音
  • ̓- 0313 上面的逗号组合
  • ̕- 0315 右上方的逗号组合
  • ՚- 055A 亚美尼亚撇号
  • ׳- 05F3 希伯来语标点符号 GERESH
  • ߴ- 07F4 NKO 高音撇号
  • ߵ- 07F5 NKO 低音撇号
  • ᾿- 1FBF 希腊语 PSILI
  • - 2018 左单引号
  • - 2019 右单引号
  • - 2032年总理
  • - A78C 拉丁文小写字母 SALTILLO
  • - FF07 全宽撇号
1赞 user13843220 7/4/2020 #2

请注意,这些类别是主观的。
例如,引号
双引号没有单个 Unicode 属性可以为您提供所需的跨度。
但是,例如,您可以使用子集

\p{Block=General_Punctuation}(?<=\p{Quotation_Mark})将给出这些的子集‘’‚‛“”„‟‹›

而使用 just
将给出这个子集
,其中有些可能是可疑的引号。
\p{Quotation_Mark}"'«»‘’‚‛“”„‟‹›⹂「」『』〝〞〟﹁﹂﹃﹄"'「」

这是另一个
给出这些
\p{Line_Break=Quotation}"'«»‘’‛“”‟‹›❛❜❝❞❟❠⸀⸁⸂⸃⸄⸅⸆⸇⸈⸉⸊⸋⸌⸍⸜⸝⸠⸡🙶🙷🙸

因此,请注意,根据 Unicode
规范,没有明确的 SET


可能对于连字符,等效的正则表达式将是\p{Pd}

find    (?:[\u002D\u058A\u05BE\u1400\u1806\u2010-\u2015\u2E17\u2E1A\u2E3A\u2E3B\u2E40\u301C\u3030\u30A0\uFE31\uFE32\uFE58\uFE63\uFF0D]|\uD803\uDEAD)
replace -  

对于单引号

find:   [\u0060\u00B4\u2018\u2019]
replace '

对于双引号

find    [\u201C\u201D]
replace "

另请注意,每个字符都有许多与之匹配的 Unicode 属性,因此遍历示例字符串可以看到
重叠的属性
关系,如下所示 ->

enter image description here

评论

0赞 DanielTheRocketMan 7/9/2020
是的,有人下载了这个。我不知道原因。