首页 > 解决方案 > 正则表达式获取字母数字字符串之间的非字母数字字符串

问题描述

假设我有这个字符串:

Alpha+*&Numeric%$^String%%$

我想获取字母数字字符之间的非字母数字字符:

+*& %$^

我有这个正则表达式:[^0-9a-zA-Z]+但它给了我

+* %$^ %%$

其中包括我不想要的尾随非字母数字字符。我也试过[0-9a-zA-Z]([^0-9a-zA-Z])+[0-9a-zA-Z],但它给了我

a+*&N c%$^S

其中包括字符a,NcS

标签: pythonregex

解决方案


如果您不介意将_字符包含为字母数字数据,则可以使用以下方法提取所有非字母数字数据:

some_string = "A+*&N%$^S%%$"

import re
result = re.findall(r'\b\W+\b', some_string)  # sets result to:  ['+*&', '%$^']

请注意我使用 of而不是or\b之类的东西。\w[^\W]

\w并且[^\W]每个匹配一个字符,因此如果您的字母数字字符串(在您想要的文本之间)恰好是一个字符,那么您认为应该是下一个匹配的内容将不匹配。

但既然\b是一个零宽度的“字边界”,它并不关心有多少个字母数字字符,只要至少有一个。


推荐阅读