如何测试只包含字母和数字的字符串?

时间:2017-10-31 03:00:54

标签: python string

我正在尝试测试字符串只包含字母或数字。以下语句应返回false但不返回。我做错了什么?

bool(re.match('[A-Z\d]', '2ae12'))

6 个答案:

答案 0 :(得分:2)

只需使用字符串方法isalnum(),就可以完全按照自己的意愿使用。

答案 1 :(得分:1)

如果您希望返回True,如果字符串是全部数字或全部字母,您可以执行以下操作:

for case in ('abcdefg','12345','2ae12'):
    print case, case.isalpha() or case.isdigit() 

打印:

abcdefg True
12345 True
2ae12 False

如果你想要一个正则表达式的相同逻辑,你会这样做:

import re
for case in ('abcdefg','12345','2ae12'):
    print case, bool(re.search(r'^(?:[a-zA-Z]+|\d+)$', case))

答案 2 :(得分:1)

虽然不是正则表达式,但您可以使用非常简洁的str.isalnum()

s = "sdfsdfq34sd"
print(s.isalnum())

输出:

True

但是,如果您确实需要纯正则表达式解决方案:

import re
if re.findall('^[a-zA-Z0-9]+$', s):
    pass #string just contains letters and digits

使用数据帧解决方案,@Wen提供:

df.col1.apply(lambda x : x.isalnum())
df=pd.DataFrame( {'col1':["sdfsdfq34sd","sdfsdfq###34sd","sdfsdf!q34sd","sdfs‌​dfq34s@d"]})

答案 3 :(得分:0)

您需要检查字符串是由字母还是数字组成的!

import re
bool(re.match('^[A-Za-z]+|\d+$', df['some_column'].str))

正如dawg建议你也可以使用isalphaisdigit

df['some_column'].str.isalpha() or df['some_column'].str.isdigit()

答案 4 :(得分:0)

你的正则表达式只匹配一个字符,我认为\d被视为转义D而不是所有整数字符的集合。

如果你真的想在这里使用正则表达式,我会怎么做;

def isalphanum(test_str):
    alphanum_re = re.compile(r"[0-9A-Z]+", re.I)
    return bool(alphanum_re.match(test_str)

让我们关注alphanum regex。我用一个原始文字编译它,由字符串表示,旁边有一个'r'。当存在斜杠时,这种类型的字符串不会转义某些字符,这意味着r"\n"被解释为斜线而N被解释为换行符。这在使用正则表达式时很有用,某些文本编辑器甚至会更改R字符串的语法突出显示以突出​​显示正则表达式中的功能以帮助您。 re.I标志忽略了测试字符串的大小写,因此[A-Z]将匹配大写或小写的A到Z.

更简单的Zen of Python解决方案涉及调用字符串的isalnum方法;

test_str = "abc123"
test_str.isalnum()

答案 5 :(得分:0)

熊猫回答:考虑一下这个df

    col
0   2ae12
1   2912
2   da2ae12
3   %2ae12
4   #^%6f
5   &^$*

您可以使用

选择仅包含字母或数字的行
df[~df.col.str.contains('(\W+)')]

你得到了

    col
0   2ae12
1   2912
2   da2ae12

如果您只想要一个布尔列,请使用

~df.col.str.contains('(\W+)')

0     True
1     True
2     True
3    False
4    False
5    False