需要Python正则表达式帮助(基本)

时间:2014-11-04 13:22:06

标签: python regex

我需要一个python正则表达式,它可以帮助我消除单词中的非法字符。

条件如下:

  1. 第一个字符必须是a-z
  2. 单词中的所有字符应仅为a-z(小写)加撇号和连字符 -
  3. 最后一个字符必须是a-z或撇号'仅
  4. 您可以假设该单词始终为小写
  5. 测试数据:

     s = "there is' -potato 'all' around- 'the 'farm-"
    

    预期产出:

    >>>print(s)
    there is' potato all' around the farm
    

    我的代码目前正是如此,但它无法正常运行:

    newLine = re.findall(r'[a-z][-\'a-z]*[\'a-z]?', s)
    

    非常感谢任何帮助!谢谢!

4 个答案:

答案 0 :(得分:1)

只匹配您不想要的字符并通过re.sub

删除ith
>>> import re
>>> s = """potato
-potato
'human'
potatoes-"""
>>> m = re.sub(r"(?m)^['-]|-$", r'', s)
>>> print(m)
potato
potato
human'
potatoes

>>> m = re.sub(r"(?m)^(['-])?([a-z'-]*?)-?$", r'\2', s)
>>> print(m)
potato
potato
human'
potatoes

DEMO

答案 1 :(得分:0)

您可以尝试:

[a-z][a-z'\-]*[a-z]|[a-z]

答案 2 :(得分:0)

试试这个:

>>> b=re.findall(r'[a-z][-\'a-z]*[\'a-z]',a)
>>> for i in b: print i
... 
potato
potato
human'
potatoes

答案 3 :(得分:0)

假设每个单词都用空格分隔,您可以找到this regex之类的所有有效单词:

(?<= |^)[a-z](?:(?:[\-\'a-z]+)?[\'a-z])?(?= |$)

但是如果你想消除非法字符,我猜你最好找到非法字符并删除它们。 现在我们再次假设您有一个字符串,该字符串应该只包含由空格分隔的单词,而不包含任何其他单词。

首先,我们可以将所有无效字符从字符串中分出:[^a-z-' ]

执行此操作后,唯一可能仍然无效的内容是单词开头的'-或单词末尾的-

因此,我们将这些内容与this regex(?<= |^)['-]+|-+(?= |$)

分开