当连字符围绕单个内部字符时,如何替换单词内连字符

肯·贝努瓦

我想在标记之前在文本中保留单词内的连字符。该策略包括用连字符替换唯一字符,然后在标记化后用连字符替换该唯一字符。注意:我最终将使用Unicode类Pd来捕获所有形式的连字符,但是在这里我将其保持简单,因为我认为这与问题无关。

问题:当一个单词包含多个内部连字符分隔单个字符时,该操作将失败。

示例和预期结果:

replaceDash <- function(x) gsub("(\\w)-(\\w)", "\\1§\\2", x)

# these are all OK
replaceDash("Hawaii-Five-O")  
## [1] "Hawaii§Five§O"
replaceDash("jack-of-all-trades")  
## [1] "jack§of§all§trades"
replaceDash("A-bomb")         
## [1] "A§bomb"
replaceDash("freakin-A")      
## [1] "freakin§A"

# not the desired outcome
replaceDash("jack-o-lantern")  # FAILS - should be "jack§o§lantern"
## [1] "jack§o-lantern"
replaceDash("Whack-a-Mole")    # FAILS - should be "Whack§a§Mole"
## [1] "Whack§a-Mole"

对于的第一个和第二个表达式,我需要什么正则表达式模式gsub()

维克多·史翠比维

您可以使用带预读功能的PCRE正则表达式来检查是否在连字符后出现字字符,但不会使用它。

replaceDash <- function(x) gsub("(\\w)-(?=\\w)", "\\1§", x, perl=T)

IDEONE演示

因此,(\\w)将字母数字符号捕获到组1中,然后在使用\\1反向引用的帮助下将其插入替换结果中,并且(?=\\w)我们仅确保存在一个字字符,但正则表达式索引保持在连字符处,从而允许下一个匹配那个字字符。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使AutoComplPop允许连字符作为单词字符

来自分类Dev

使AutoComplPop允许连字符作为单词字符

来自分类Dev

用连字符代替单词和单词

来自分类Dev

连字符后如何不打断单词?

来自分类Dev

如何使用sed分割包含连字符的单词?

来自分类Dev

如何在删除列表中单词之间的连字符时克服不一致

来自分类Dev

在Python中创建列表时如何忽略带连字符的单词?

来自分类Dev

在列表中的单词之间添加连字符

来自分类Dev

如何用管道定界符替换连字符

来自分类Dev

如何替换表名中的连字符(破折号)?

来自分类Dev

连字符块中无连字符

来自分类Dev

在链接中用连字符替换空格

来自分类Dev

URL 重写 - 用连字符替换点

来自分类Dev

XSL:用连字符替换空格

来自分类Dev

如何使用正则表达式同时匹配单个单词字符串和带连字符的字符串?

来自分类Dev

如何修剪文件扩展名,用空格替换连字符,并用大写字母开头每个单词?

来自分类Dev

给连字符命名

来自分类Dev

大写连字符名称

来自分类Dev

删除NSNumberFormatter连字符

来自分类Dev

大写的连字符名称

来自分类Dev

解析短连字符?

来自分类Dev

egrep 中的连字符

来自分类Dev

在ElasticSearch中搜索时删除连字符

来自分类Dev

模式包含连字符“-”时与grep匹配

来自分类Dev

连字符替换为Android中的奇怪字符

来自分类Dev

用连字符替换字符串中的文本

来自分类Dev

Powershell 用连字符替换空格和特殊字符

来自分类Dev

正则表达式可同时匹配带连字符和不带连字符的单词

来自分类Dev

乳胶文件中带连字符的单词及其未连字符的计数