全部 - 需要一个匹配包含重复多次字符的整个单词的正则表达式.例如,给出句子"这里有一些测试词",我想在"areee"和"testtting"上匹配.
像"([az])\ 1 {1,}"这样的模式匹配重复的字符,但它返回"eee"和"ttt",而不是包含重复字符的整个单词.我用"\ w"代表单词和"\ b"代表单词边框进行了多种变体实验,但似乎无法使其正常工作......谢谢!
您可以使用
\b(?=\w*(\w)\1)\w+\b
Run Code Online (Sandbox Code Playgroud)
请参阅正则表达式演示
没有前瞻的更多增强版本(类似于Federico Piazzi在下面的评论中建议的)看起来像
\b\w*(\w)\1\w*\b
Run Code Online (Sandbox Code Playgroud)
看另一个正则表达式演示.不需要为反向引用设置量词,\1因为即使两个重复的连续字符已经授权该字用于匹配.
图案细节:
\b - 领先的单词边界(?=\w*(\w)\1)- 一个正面的预测,它将需要至少1个重复的单词字符(\w*将匹配0+单词字符,(\w)将匹配并捕获到第1组中的单词字符\1并将匹配捕获到组1中的相同字符)将匹配的单词中与...\w+ - 1个以上的单词字符\b - 尾随字边界具有重复连续字母提取的单词的 R代码演示:
> library(stringr)
> text = "here areee some testtting words"
> str_extract_all(text, "\\b(?=\\w*(\\w)\\1)\\w+\\b")
[[1]]
[1] "areee" "testtting"
Run Code Online (Sandbox Code Playgroud)
并删除这些单词的演示:
> gsub("\\s*\\b(?=\\w*(\\w)\\1)\\w+\\b", text, replacement = " ", perl = TRUE)
[1] "here some words"
Run Code Online (Sandbox Code Playgroud)
请参阅\\s*模式开头添加的内容,以便在要删除的单词之前修剪空格(如果有).如果您还需要删除删除第一个单词后出现的初始空格,请使用trimws().
注意:如果您打算只检查重复的字母,请使用\b(?=\w*([a-zA-Z])\1)\w+\b
| 归档时间: |
|
| 查看次数: |
3122 次 |
| 最近记录: |