匹配特殊字符之间的字符串

时间:2013-10-23 14:47:15

标签: python regex

我对正则表达式略有不满,但大部分时间我都不熟悉它。该字符串的格式为:

\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")

我想知道是否有更好的方法来匹配这种模式,或者我处理它的方式是否正常。

感谢。

2 个答案:

答案 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:]