Python判断字符串是否为合法标示符操作


Posted in Python onSeptember 03, 2020

这学期在学习编译原理,最近的上机作业就是做一个简单的词法分析器,在做的过程中,突然有个需求就是判断一个字符串是否为合法的标示符,因为我是用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 相关文章推荐
Python中利用原始套接字进行网络编程的示例
May 04 Python
Python调用命令行进度条的方法
May 05 Python
Python MySQLdb Linux下安装笔记
May 09 Python
对于Python装饰器使用的一些建议
Jun 03 Python
Python 实现数据库更新脚本的生成方法
Jul 09 Python
Python制作词云的方法
Jan 03 Python
运动检测ViBe算法python实现代码
Jan 09 Python
win7下python3.6安装配置方法图文教程
Jul 31 Python
对json字符串与python字符串的不同之处详解
Dec 19 Python
如何基于python实现归一化处理
Jan 20 Python
python 根据列表批量下载网易云音乐的免费音乐
Dec 03 Python
Python基础学习之奇异的GUI对话框
May 27 Python
图解Python中深浅copy(通俗易懂)
Sep 03 #Python
python简单实现9宫格图片实例
Sep 03 #Python
django使用graphql的实例
Sep 02 #Python
django数据模型中null和blank的区别说明
Sep 02 #Python
sqlalchemy实现时间列自动更新教程
Sep 02 #Python
解决Python 函数声明先后顺序出现的问题
Sep 02 #Python
解决Python3.8运行tornado项目报NotImplementedError错误
Sep 02 #Python
You might like
php下使用以下代码连接并测试
2008/04/09 PHP
PHP中copy on write写时复制机制介绍
2014/05/13 PHP
PHP中使用register_shutdown_function函数截获fatal error示例
2015/04/21 PHP
如何使用php实现评委评分器
2015/07/31 PHP
一些mootools的学习资源
2010/02/07 Javascript
jquery实现的元素的left增加N像素 鼠标移开会慢慢的移动到原来的位置
2010/03/21 Javascript
关于Jquery操作Cookie取值错误的解决方法
2013/08/26 Javascript
jQuery的css()方法用法实例
2014/12/24 Javascript
JS实现动态给图片添加边框的方法
2015/04/01 Javascript
easyui-datagrid开发实践(总结)
2017/08/02 Javascript
element实现合并单元格通用方法
2019/11/13 Javascript
JS控制只能输入数字并且最多允许小数点两位
2019/11/24 Javascript
vue中keep-alive内置组件缓存的实例代码
2020/04/16 Javascript
JS数据类型判断的几种常用方法
2020/07/07 Javascript
Python中的lstrip()方法使用简介
2015/05/19 Python
Django与JS交互的示例代码
2017/08/23 Python
python pandas 组内排序、单组排序、标号的实例
2018/04/12 Python
PyQt4实现下拉菜单可供选择并打印出来
2018/04/20 Python
Python/ArcPy遍历指定目录中的MDB文件方法
2018/10/27 Python
python队列Queue的详解
2019/05/10 Python
12个Python程序员面试必备问题与答案(小结)
2019/06/24 Python
Python 单例设计模式用法实例分析
2019/09/23 Python
如何修复使用 Python ORM 工具 SQLAlchemy 时的常见陷阱
2019/11/19 Python
Python如何使用bokeh包和geojson数据绘制地图
2020/03/21 Python
python的数学算法函数及公式用法
2020/11/18 Python
三只松鼠官方旗舰店:全网坚果销售第1
2017/11/25 全球购物
Cynthia Rowley官网:全球领先的生活方式品牌
2020/10/27 全球购物
大学生职业生涯规划书的基本内容
2014/01/06 职场文书
乡村卫生服务一体化管理实施方案
2014/03/30 职场文书
大学生就业意向书范文
2014/04/01 职场文书
三八节标语
2014/06/27 职场文书
社团活动总结书
2014/06/27 职场文书
2015年消费者权益日活动总结
2015/02/09 职场文书
芙蓉镇观后感
2015/06/10 职场文书
在前女友婚礼上,用Python破解了现场的WIFI还把名称改成了
2021/05/28 Python
python pygame入门教程
2021/06/01 Python