我正在尝试使用正则表达式在单引号之间提取字符串并修剪任何前面或后面的空格。我能够使用(?<=')[^']+(?=')
提取单引号之间的字符串,但是,这是我正在努力解决的修剪位。
字符串: message sent from ' joe bloggs '
.
我希望正则表达式提取的结果是: joe bloggs
一种方法可以做到这一点:
's*([^']+?)s*'
-
'
匹配报价 -
s*
匹配在匹配中忽略的可选空格 -
([^']+?)
捕获字符串 -
s*
匹配匹配后要忽略的可选空格 -
'
匹配报价
你可以在这里尝试一下:https://regex101.com/r/vQqnaB/2
import re
my_str = "message sent from ' joe bloggs '"
content = re.search(r"'s*([^']+?)s*'", my_str).groups()[0]
print('%r' % content) # 'joe bloggs'
也许像这样的简单正则表达式应该可以解决问题:
import re
s = "message sent from ' joe bloggs '"
extracted_text = re.search('''(?<=')s*[^']+?s*(?=')''', s)
print extracted_text.group().strip() # output: 'joe bloggs'
以下是此代码的作用:
-
(?<=')
- 正面看后面:确保它匹配的文本前面有一个'
。 -
s*
- 零个或多个空格。 -
[^']+?
- 尽可能多的字符不是引号。 -
s*
- 再次为零个或多个空格。 -
(?=')
- 积极展望未来:确保匹配的文本以引号结尾。 - 一旦匹配,您可以通过调用
match.group()
来获得它。 - 然后你留下字符串
' joe bloggs '
.因此,您可以通过调用str.strip()
来摆脱空格
如果您确实已经获得了单引号之间的文本,那么其余的就像
s = ' joe bloggs '
result = s.strip()
当然,您可以使用正则表达式来做到这一点,在这种情况下,我可以推荐出色的 https://regex101.com/