我对正则表达式略有不满,但大部分时间我都不熟悉它。该字符串的格式为:
\n\n*text here, can be any spaces, etc. etc.*
我将获得的字符串将有两个换行符,后跟星号,后跟文本,然后以另一个星号结束。
我想从返回的文本中排除开头\n\n
。这是我到目前为止提出的模式,似乎有效:
pattern = "(?<=\\n\\n)\*(.*)(\*)"
match = re.search(pattern, string)
if match:
text = match.group()
print (text)
else:
print ("Nothing")
我想知道是否有更好的方法来匹配这种模式,或者我处理它的方式是否正常。
感谢。
答案 0 :(得分:2)
您可以使用以下方法避免捕获群组并使整个匹配结果:
pattern = r'(?<=\n\n\*)[^*]*(?=\*)'
示例:
import re
print re.findall(r'(?<=\n\n\*)[^*]*(?=\*)','\n\n*text here, can be any spaces, etc. etc.*')
如果您想在结果中包含星号,请改为使用:
pattern = r'(?<=\n\n)\*[^*]*\*'
答案 1 :(得分:1)
正则表达式在这种情况下是过度的 - 如果分隔符始终是静态的并且在字符串的头部/尾部:
>>> s = "\n\n*text here, can be any spaces, etc. etc.*"
>>> def CheckString(s):
... if s.startswith("\n\n*") and s.endswith("*"):
... return s[3:-1]
... else:
... return "(nothing)"
>>> CheckString(s)
'text here, can be any spaces, etc. etc.'
>>> CheckString("no delimiters")
'(nothing)'
(根据需要调整切片索引 - 我不清楚是否要保留前导/尾随'*'字符。如果要保留它们,请将切片更改为
return s[2:]