正则表达式未被认可,尽管应该

时间:2018-07-20 12:35:51

标签: regex

我正在尝试分割以下文本:

§1Hello§fman, §0this §8is §2a §blittle §dtest :)

通过定界符“§[a-z | A-Z 我的第一种方法是:

^[§]{1}[a-fA-F]|[0-9]$ 但是pythex.org使用此正则表达式不会在我的示例文本中找到任何匹配项。

你知道为什么吗?

2 个答案:

答案 0 :(得分:1)

^[§]{1}[a-fA-F]|[0-9]$模式匹配以§开头,然后有a-fA-F范围内的字母或字符串末尾的数字的字符串。 请注意,^匹配字符串的开头,$匹配字符串位置的结尾。

要提取§之后的那些单词,然后提取十六进制字符,则可以使用

re.findall(r'§[A-Fa-z0-9]([^\W\d_]+)', s)
# => ['Hello', 'man', 'this', 'is', 'a', 'little', 'test']

要删除它们,可以使用re.sub

re.sub(r'\s*§[A-Fa-z0-9]', ' ', s).strip()
# => Hello man, this is a little test  :)

要获取这些定界符的字符串,您可以使用

"".join(re.findall(r'§[A-Za-z0-9]', s))
# => §1§f§0§8§2§b§d

请参见this Python demo

详细信息

  • §-一个§符号
  • [A-Fa-z0-9]-a-fA-F范围内的1位数字或ASCII字母(十六进制字符)
  • ([^\W\d_]+)-第1组(此值将由re.findall提取):一个或多个字母(包括数字,请删除\d

答案 1 :(得分:1)

您的正则表达式使用anchors声明字符串^$的开始和结束。

您可以将正则表达式更新为§[a-fA-F0-9]

使用split的示例:

import re

s = "§1Hello§fman, §0this §8is §2a §blittle §dtest  :)"
result = [r.strip() for r in re.split('[§]+[a-fA-F0-9]', s) if r.strip()]
print(result)

Demo