Python判断字符串是否为合法标识符的操作方法
本文介绍如何在Python中判断一个字符串是否为合法的标识符。首先明确标识符需以字母或下划线开头,由字母、数字或下划线组成且非保留字。通过导入keyword模块获取保留字列表,结合字符串处理逻辑实现校验功能,并提供Python2与Python3的兼容代码示例及运行结果分析。
Python判断字符串是否为合法标识符的操作方法
在编译原理课程的上机作业中,需要开发一个简单的词法分析器。在此过程中,遇到一个具体需求:判断输入的字符串是否为合法的标识符。由于项目基于Python语言构建Python词法分析器,因此本文将分享在Python环境下实现该判断的具体方法。
Python标识符定义与关键字列表
在编写判断逻辑前,首先需要明确Python语言对标识符的定义规范。
根据Python语法规定,合法的标识符必须满足以下条件:以字母或下划线开头,后续字符由字母、数字或下划线组成,且该字符串不能是Python的关键字(保留字)。
接下来需要明确Python中具体包含哪些关键字,以便在判断时进行排除。
# python2.x
import keyword
print keyword.kwlis
# python3.x
import keyword
print(keyword.kwlist)
# python2.x输出:
['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
# 共31个
# python3.x输出:
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
# 共33个
标识符判断逻辑与代码实现
基于上述定义,开始编写具体的判断逻辑。
# python2.7
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import keyword
import string
def is_signal(s):
kw = keyword.kwlist
if s in kw:
return 0
elif s[0] == '_' or s[0] in string.letters: # 判断是否为字母或下划线开头
for i in s:
if i == '_' or i in string.letters or i in string.digits: # 判断是否由字母数字或下划线组成
pass
else:
return 0
return 1
else:
return 0
def main():
s = raw_input()
if is_signal(s) == 1:
print "True"
else:
print "False"
if __name__ == '__main__':
main()
# python3.4
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import keyword
import string
def is_signal(s):
kw = keyword.kwlist
if s in kw:
return 0
elif s[0] == '_' or s[0] in string.ascii_letters: # 判断是否为字母或下划线开头
for i in s:
if i == '_' or i in string.ascii_letters or i in string.digits: # 判断是否由字母数字或下划线组成
pass
else:
return 0
return 1
else:
return 0
def main():
s = input()
if is_signal(s) == 1:
print("True")
else:
print("False")
if __name__ == '__main__':
main()
程序通过接收键盘输入进行判断:若字符串符合标识符规范,则返回True;否则返回False。
补充说明:Python标识符的命名规则严格要求以字母或下划线开头,后续字符可以是字母、下划线或数字。
标识符合法性检查的核心逻辑是:首字符必须为字母或下划线,后续字符需为字母、下划线或数字。本示例代码主要针对长度大于等于2的标识符进行校验。
标识符校验脚本与运行结果
相关代码文件名为idcheck.py。
#!/usr/bin/env python
'''
idcheck.py -- checks identifiers for validity
'''
import string # string utility module
# create alphabet and number sets
alphas = string.ascii_letters + '_'
nums = string.digits
# salutation message and input prompt
print ('Welcome to the Identifier Checker v1.0')
print ('Testees must be at least 2 chars long.')
inp = input('Identifier to test ?')
if len(inp) >= 1:
if inp[0] not in alphas:
print ('invalid: first symbol must be alphabetic')
else:
for otherChar in inp[1:]:
if otherChar not in alphas + nums:
print ('invalid: remaining symbols must be alphanumeric')
break
else:
print ("okay as an identifier")
else:
print ('invalid: length must be >= 1')
运行结果示例1展示了输入非法标识符时的反馈。
Welcome to the Identifier Checker v1.0
Testees must be at least 2 chars long.
Identifier to test -> 123_das
invalid: first symbol must be alphabetic
运行结果示例2展示了输入合法标识符时的反馈。
Welcome to the Identifier Checker v1.0
Testees must be at least 2 chars long.
Identifier to test -> _123sdad
okay as an identifier
以上即为Python判断字符串是否为合法标识符的完整操作分享,供读者参考。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









