如何使用正则表达式匹配像hi-hello-yes这样的字符串

时间:2014-09-04 07:36:44

标签: python regex

解决方案:(([^ - ] + - )hello | ^ hello)( - 。+ | $)

我想使用正则表达式来匹配句子。规则是:

  • hello必须在一个句子中
  • 如果-跟在hello后面或前面-,那么-之前必须有一些内容或跟随hi1-hello-hi2 hello hello-hi1

正则表达式匹配的句子的例子:

hi1-hihello-hi2
hihello
hellohi
hellohi-hi2

正则表达式的例子应该匹配:

(.*-)?hello(-.*)?

我已尝试{{1}}等等,但没有运气。

我使用re.match()方法 enter image description here

4 个答案:

答案 0 :(得分:1)

你快到了。只需使用字边界\b来匹配单词和非单词字符,并将*更改为+,以匹配一个或多个字符。

^(?:.+-)?\bhello\b(?:-.+)?$

DEMO

>>> import re
>>> s = """hi1-hello-hi2
... hello
... hello-hi1
... hi1-hihello-hi2
... hihello
... hellohi
... hellohi-hi2"""
>>> m = re.findall(r'^(?:.+-)?\bhello\b(?:-.+)?$', s, re.M)
>>> for i in m:
...     print i
... 
hi1-hello-hi2
hello
hello-hi1

答案 1 :(得分:1)

^(.+?-)?hello(-.+)?$

试试这个。看看演示。

http://regex101.com/r/pP3pN1/34

答案 2 :(得分:0)

对某人可能有用。

def hello_match(reg=r"\b(\w+-)?hello-?\b"):
    Eg=["hi1-hello-hi2","hello","hello-hi1","hi1-hihello-hi2","hihello","hellohi","hellohi-hi2"]
    for item in Eg:
        if re.match(reg,item):
            print item

hello_match()
## hi1-hello-hi2
## hello
## hello-hi1

答案 3 :(得分:0)

\b(\w+-)?hello(-\w+)?\b

这个改进DJJ的反应。他的正则表达式抓住了hello-