Python RegExpression根据需要不工作

时间:2016-07-29 06:37:28

标签: regex filesystems

import re
print sorted( re.findall(r'\b[abcABC][\w-]+' ,open("file.txt",'r').read()))

file.txt包括:

aaa
autonomic-ads-bgl
academy
bfc
bhhuu
cgak
ctsss
dec-ama-cdr
dfgg-hhj-bhjk
efghk-cgh-hghj
pattern-bgl-fghhj

输出:

aaa
academy
ama-cdr
autonomic-ads-bgl
bfc
bhhuu
bgl-fghhj
cgak
cgh-hghj
ctsss

但是必需的输出是从a到c的排序元素

aaa
academy
autonomic-ads-bgl
bfc
bhhuu
cgak
ctsss

1 个答案:

答案 0 :(得分:0)

您可以排除之前带有连字符的所有条目:负面的背后隐藏:

print sorted(re.findall(r'(?<!-)\b[abcABC][\w-]+' ,s))
                          ^^^^^^

请参阅Python demo

<强>详情:

  • (?<!-) - 如果在当前正则表达式索引(位置)之前有-权限,那么负面的背后效果会使匹配失败
  • \b - 领先的单词边界
  • [abcABC] - 集合中的一个字符
  • [\w-]+ - 一个或多个字词或-字符。

请注意,如果您的单词不以单词边界开头,并且只有空格或字符串的开头,则可以使用(?<!\S) lookbehind而不是(?<!-)\bdemo ):

r'(?<!\S)[abcABC][\w-]+'