打印正则表达式的正确结果

时间:2019-06-04 23:47:11

标签: regex python-3.x

我需要使用正则表达式编写一个strip函数。

这是我当前的代码:

import re

def makestringstripfun(text):
    stripStringRegex = re.compile(r'(^.*?)(\w+)( +\w+)*(\s|.*?)$')
    match = stripStringRegex.search(text)
    print(match)

print('Enter the string:')
text = input()
makestringstripfun(text)

无论输入什么,我都希望输出整个字符串。现在,如果我输入以下文本:

  

史密斯·约翰(John Smith)回家,您的班次要在30分钟后结束,然后您为什么在这里

我的代码的输出是:

<_sre.SRE_Match object; span=(0, 84), match='smith john go home your shift getting over in t>

2 个答案:

答案 0 :(得分:0)

search()方法返回一个匹配对象,而不是字符串。

请参阅match objects的文档以了解如何处理。简而言之,您可以使用match.group(0)来获取第一个匹配组。

提示:在regex101.com上,您可以轻松测试正则表达式。

答案 1 :(得分:0)

我不确定,我们想在这里匹配什么。

如果您只想输出整个字符串,也许我们可能想要修改表达式并添加捕获组,类似于:

^((.*?)(\w+)( +\w+)*(\s|.*?))$

Demo

测试

# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility

import re

regex = r"^((.*?)(\w+)( +\w+)*(\s|.*?))$"

test_str = "smith john go home your shift getting over in the 30 minute later then why you here"

matches = re.finditer(regex, test_str, re.MULTILINE)

for matchNum, match in enumerate(matches, start=1):

    print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))

    for groupNum in range(0, len(match.groups())):
        groupNum = groupNum + 1

        print ("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum)))

# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.

RegEx电路

jex.im可视化正则表达式:

enter image description here