让我说说这个字符串:
Alpha+*&Numeric%$^String%%$
我想获取介于字母数字字符之间的非字母数字字符:
+*& %$^
我有这个正则表达式:[^0-9a-zA-Z]+
,但它给了我
+* %$^ %%$
,其中包含我不需要的尾部非字母数字字符。我也尝试过[0-9a-zA-Z]([^0-9a-zA-Z])+[0-9a-zA-Z]
,但它给了我
a+*&N c%$^S
其中包括字符a
,N
,c
和S
答案 0 :(得分:2)
如果您不介意将_
字符用作字母数字数据,则可以使用以下命令提取所有非字母数字数据:
some_string = "A+*&N%$^S%%$"
import re
result = re.findall(r'\b\W+\b', some_string) # sets result to: ['+*&', '%$^']
请注意,我使用\b
代替了\w
或[^\W]
之类的东西。
\w
和[^\W]
都匹配一个字符,因此,如果您的字母数字字符串(在您想要的文本之间)恰好是一个字符,那么您认为应该是下一个匹配项就不会匹配。
但是,由于\b
是零宽度的“单词边界”,因此只要存在至少一个字母数字字符,它就不会在乎。
答案 1 :(得分:1)
您第二次尝试的唯一问题是+
限定词的位置-它应该在括号内。您还可以使用单词字符类\w
及其反符号\W
提取这些项目,与第二个正则表达式相同,但包括下划线_
作为单词的一部分:>
import re
s = "Alpha+*&Numeric%$^String%%$"
print(re.findall(r"\w(\W+)\w", s)) # adds _ character
print(re.findall(r"[0-9a-zA-Z]([^0-9a-zA-Z]+)[0-9a-zA-Z]", s)) # your version fixed
print(re.findall(r"(?i)[0-9A-Z]([^0-9A-Z]+)[0-9A-Z]", s)) # same as above
输出:
['+*&', '%$^']
['+*&', '%$^']
['+*&', '%$^']