全部 - 需要一个匹配包含重复多次字符的整个单词的正则表达式。例如,给出句子"这里有一些测试词"我想匹配" areee"和"测试"。
"([a-z])\ 1 {1,}"匹配重复的字符,但它返回" eee"和" ttt"而不是包含重复字符的整个单词。我使用" \ w"进行了多种变体实验。用于单词和" \ b"对于单词边框,但似乎无法使其正常工作......谢谢!
答案 0 :(得分:5)
您可以使用
\b(?=\w*(\w)\1)\w+\b
请参阅regex demo
没有前瞻的更多增强版本(类似于Federico Piazzi中建议的comment below)看起来像
\b\w*(\w)\1\w*\b
见another regex demo。没有必要为反引用\1
设置量词,因为即使两个重复的连续字符已经授权该字匹配。
模式细节:
\b
- 领先的单词边界(?=\w*(\w)\1)
- 需要至少1个重复单词字符的正面预测(\w*
将匹配0 +单词字符,(\w)
将匹配并将1个单词字符捕获到第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"
这些单词的演示删除:
> gsub("\\s*\\b(?=\\w*(\\w)\\1)\\w+\\b", text, replacement = " ", perl = TRUE)
[1] "here some words"
请参阅模式开头添加的\\s*
,以便在要删除的单词之前修剪空格(如果有)。如果您还需要删除删除第一个单词后出现的初始空格,请使用trimws()
。
注意:如果您打算只检查重复的字母,请使用\b(?=\w*([a-zA-Z])\1)\w+\b
答案 1 :(得分:0)
你需要做的只是用必要的胡言乱语填充它
^[a-z]*([a-z])\1{1}[a-z]*$
如评论中所述,{1}永远不是必需的。这样做:
^[a-z]*([a-z])\1[a-z]*$
在此处观看演示
https://regex101.com/r/dT6dK8/1
如果您希望内联工作
,请移除^
和$