用于单词的Python正则表达式,用于不开始但不以

时间:2013-09-11 06:15:10

标签: python regex

我正在尝试在pythond中构造正则表达式以遵循规则,

  1. 接受仅包含字母的单词
  2. 字词可能包含 - (hypen)
  3. 单词不能以特殊字符结尾,例如。 :)(请考虑这两个)
  4. Word不能以_(下划线)开头,但可能以_(下划线)
  5. 结尾

    例如。

    接受单词

    Hello
    Hello-World
    Hello_
    Hello1
    

    拒绝单词

    _hello_
    hello:
    hello:)
    

    我想出了正则表达式,

    '(?!_)[\w-]+(?!:)'
    

    它仍然接受所有单词,只是在统计信息中跳过_并且:最后,

    有人能指出,我的正则表达式有什么问题 感谢

2 个答案:

答案 0 :(得分:1)

您可以添加前导\b

words = ["Hello", "Hello-World", "Hello_", "Hello1", "_hello_", "hello:",
         "hello:)" ]

import re

for word in words:
  print re.findall(r'\b(?!_)[\w-]+(?!:)\b', word)

输出:

['Hello']
['Hello-World']
['Hello_']
['Hello1']
[]
[]
[]

来自http://docs.python.org/2/library/re.html

  

\b匹配空字符串,但仅匹配单词的开头或结尾。单词被定义为字母数字或下划线字符的序列,因此单词的结尾由空格或非字母数字的非下划线字符表示。

答案 1 :(得分:0)

你所要求的内容仍然存在很多含糊之处,但这是你给出的样本集的另一个解决方案,在fiddle之前

^[A-Za-z-]+[_\d]?$
相关问题