0

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

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

例如。

接受的话

Hello
Hello-World
Hello_
Hello1

拒绝的话

_hello_
hello:
hello:)

我想出了以下正则表达式,

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

它仍然接受所有在 stat 中跳过 _ 和 : 最后的单词,

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

4

2 回答 2

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匹配空字符串,但只匹配单词的开头或结尾。单词被定义为字母数字或下划线字符的序列,因此单词的结尾由空格或非字母数字、非下划线字符表示。

于 2013-09-11T06:21:24.687 回答
0

您要求的内容仍然有很多歧义,但这是您提供的样本集的另一种解决方案,在这个小提琴之前

^[A-Za-z-]+[_\d]?$
于 2013-09-11T06:32:27.883 回答