正则表达式提取'**'字符内的文本

时间:2014-03-11 18:12:56

标签: python regex

我需要一个正则表达式从过多的 * *字符中提取一个单词。我知道这对正则表达式大师来说是微不足道的......我只是遇到了一些困难。

 phrase = re.search('\*.*(\w.*)\*', message.text).group(1)

4 个答案:

答案 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)

如何:\*+(\w+)\*+

查找一个或多个*,然后查找一个或多个单词字符,然后查找一个或多个*

See it in action

答案 3 :(得分:0)

>>> example_string = '** **hello_123** ****'
>>> phrase = re.search('\*+(\w+)\*+', message.text).group(1)
>>> phrase
'hello_123'

当星号之间没有空格时,这也适用。