我有一个字典文本文件,其中包含一些我不想要的单词。
示例:
aa
aaa
aaaa
bb
b
bbb
等
我想使用正则表达式来选择这些单词并将其删除。然而, 我所拥有的东西似乎变得太长了,必须有一种更有效的方法。
到目前为止,这是我的代码:
/^a{1,6}$|^b{1,6}$|^c{1,6}$|^d{1,6}$|^e{1,6}$|^f{1,6}$|^g{1,6}$|^[i]{2,3}$/
似乎我必须为每封信做这件事。我怎么能更简洁地做到这一点?
答案 0 :(得分:3)
将单词折叠为唯一字母并删除所有仅包含一个字母的单词要容易得多:
words = "aa aaa aaaa bb b bbb etc aab abcabc"
words.split(/\s+/).select do |word|
word.chars.uniq.length > 1
end
# => ["etc", "aab", "abcabc"]
这会将您的字符串拆分为单词,然后仅选择其中包含多种字符的单词(.chars.uniq
)
答案 1 :(得分:2)
^([A-Z])\ 1?\ 1?\ 1?\ 1?\ 1?$
匹配任何单个字母,然后是5个可选的反向引用到首字母。
这也可能有效:
^([A-Z])\ {1,5} $
答案 2 :(得分:1)
试试这个
\b([a-zA-Z])\1*\b
如果您想要(除字母外)还要包含重复的数字或下划线,请使用以下代码:
\b([\w])\1*\b
<强>更新强>
要排除I
被删除:
(?i)ii+|\b((?i)[a-hj-z])\1*\b
上面添加了 (?i)
,使字母不区分大小写。
答案 3 :(得分:0)
您可以尝试使用此正则表达式:
\b([a-z])\1{0,}\b
并替换为空
Ruby代码示例:
re = /\b([a-z])\1{0,}\b/m
str = 'aa aaa aaaa bb b bbb abc aa a pqaaa '
result = str.gsub(re,'')
puts result