仅使用正则表达式从列表中提取不包含重复字母的单词

Amj*_*ith 2 python regex perl grep

我有一个大单词列表文件,每行一个单词.我想用重复的字母过滤掉单词.

INPUT:
  abducts
  abe
  abeam
  abel
  abele

OUTPUT:
  abducts
  abe
  abel
Run Code Online (Sandbox Code Playgroud)

我想用Regex(grep或perl或python)来做这件事.那可能吗?

cjm*_*cjm 7

这是很容易编写匹配单词的正则表达式有重复的字母,然后否定匹配:

my @input = qw(abducts abe abeam abel abele);
my @output = grep { not /(\w).*\1/ } @input;
Run Code Online (Sandbox Code Playgroud)

(此代码假定@input每个条目包含一个单词.)但是这个问题不一定最好用正则表达式解决.

我已经在Perl中给出了代码,但它可以很容易地转换为支持反向引用的任何正则表达式风格,包括grep(它也有-v切换否定匹配).

  • FWIW反向正则表达式(简化为只假设字符串中的单词字符)是`/ ^(?:(.)(?!.*?\ 1))+\z /` (2认同)
  • 对于逼真的字长,我希望正则表达式比重复计数快得多.我改变它是非贪婪的. (2认同)

tch*_*ist 5

$ egrep -vi '(.).*\1' wordlist
Run Code Online (Sandbox Code Playgroud)