Python判断字符串是否为合法标识符的操作方法

叶初
叶初
发布时间:2026-10-14 | 6人浏览过
原创

本文介绍如何在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判断字符串是否为合法标识符的完整操作分享,供读者参考。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表