我需要使用正则表达式编写一个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>
答案 0 :(得分:0)
search()
方法返回一个匹配对象,而不是字符串。
请参阅match objects的文档以了解如何处理。简而言之,您可以使用match.group(0)
来获取第一个匹配组。
提示:在regex101.com上,您可以轻松测试正则表达式。
答案 1 :(得分:0)
我不确定,我们想在这里匹配什么。
如果您只想输出整个字符串,也许我们可能想要修改表达式并添加捕获组,类似于:
^((.*?)(\w+)( +\w+)*(\s|.*?))$
# 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.
jex.im可视化正则表达式: