我需要一个正则表达式从过多的 * *字符中提取一个单词。我知道这对正则表达式大师来说是微不足道的......我只是遇到了一些困难。
phrase = re.search('\*.*(\w.*)\*', message.text).group(1)
答案 0 :(得分:1)
对于任意数量的*之间的文本,请使用:
phrase = re.search(r'\*+(\w+)\*', message.text).group(1)
请注意,r
之类字符串左侧的r'string'
表示该字符串是完全字面的,除了正常的正则表达式转义之外不需要额外的转义。
如果您只想匹配匹配的一组开头(**this**
但不是***this**
或*this**
),请使用:
phrase = re.search(r'(?<!\*)(\*+)(\w+)\1(?!\*)', message.text).group(2)
解释:
(?<!\*)
是一个负面的背后说法,正则表达式不能在一颗恒星之后开始,因为那时这颗恒星不会被包括在内。\1
匹配与第一组相同数量的星星。(?!\*)
是一个负面的预测,表示在\1
组中的最后一颗星之后不能再有星星了。re.search(...).group()
小组计数。要对字符串中的每个实例执行所有操作,请使用以下内容:
phrases = [r[1] for r in re.findall(r'(?<!\*)(\*+)(\w+)\1(?!\*)', message.text)]
答案 1 :(得分:0)
关闭。我认为您需要转义反斜杠并删除一些.
phrase = re.search('\\**(\\w+)\\*', message.text).group(1)
答案 2 :(得分:0)
答案 3 :(得分:0)
>>> example_string = '** **hello_123** ****'
>>> phrase = re.search('\*+(\w+)\*+', message.text).group(1)
>>> phrase
'hello_123'
当星号之间没有空格时,这也适用。