英国收缩灾难

English contraction catastrophes

背景

正在将直引号写入弯引号转换器,并希望将替换分为几个不同的步骤。第一步是使用已知缩略语的词典替换文本中的缩略语。这不会解决歧义,但应该将直引号用法转换为常见的缩略语。

问题

在 Java、\b\w 中不包括撇号作为单词的一部分,这使得这个问题有点挑剔。问题在于匹配词:

代码

给定一些无意义的文本:

'Twas---Wha'? Wouldn'tcha'? 'Twas, or 'twasn't, 'tis what's 'tween dawn 'n' dusk 'n stuff. Cookin'? 'Sams' place, 'yo''

正则表达式应捕获以下单词:

以下是无效的表达,杂乱无章的想法:

这个似乎有效:

问题

哪些正则表达式可以正确地对这四组缩写进行分类?

这个正则表达式应该做你想做的。它使用命名的捕获组对具有适当环视的单词进行分类,以确保我们将整个单词与所需的外部引号相匹配:

(?<inner>(?<![\p{L}'])(?:\p{L}+')+\p{L}+(?![\p{L}']))|
(?<began>(?<!\p{L})(?:'\p{L}+)+(?![\p{L}']))|
(?<ended>(?<![\p{L}'])(?:\p{L}+')+(?!\p{L}))|
(?<outer>(?<!\p{L})'\p{L}+'(?!\p{L}))

Group inner 查找一个字符串,其中包含一些字母组​​,后跟一个引号 (?:\p{L}+')+,然后是一些字母 \p{L}+.

Group began 查找一个字符串,其中包含一些引号组,后跟一些字母 (?:'\p{L}+)+.

Group ended 查找一个字符串,其中包含一些字母组​​后跟一个引号 (?:\p{L}+')+.

Group outer 查找两端带引号且中间有一些字母的字符串 '\p{L}+'.

Demo on regex101