0

我对正则表达式有点搞砸了,但在大多数情况下我对它很不熟悉。该字符串将采用以下格式:

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

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

谢谢。

4

2 回答 2

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)\*[^*]*\*'
于 2013-10-23T14:51:36.823 回答
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:]
于 2013-10-23T15:28:08.680 回答