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新手实现2048小游戏
Mar 31 Python
Python3学习笔记之列表方法示例详解
Oct 06 Python
python虚拟环境的安装配置图文教程
Oct 20 Python
Python简单读取json文件功能示例
Nov 30 Python
Python实现使用卷积提取图片轮廓功能示例
May 12 Python
使用Python Pandas处理亿级数据的方法
Jun 24 Python
python selenium实现发送带附件的邮件代码实例
Dec 10 Python
python模块和包的应用BASE_PATH使用解析
Dec 14 Python
如何利用pygame实现简单的五子棋游戏
Dec 29 Python
如何卸载python插件
Jul 08 Python
C++和python实现阿姆斯特朗数字查找实例代码
Dec 07 Python
Pytorch中的学习率衰减及其用法详解
Jun 05 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
支持数组的ADDSLASHES的php函数
2010/02/16 PHP
php获取服务器信息的实现代码
2013/02/04 PHP
PHP获取MAC地址的具体实例
2013/12/13 PHP
php实现的常见排序算法汇总
2014/09/08 PHP
对PHP PDO的一些认识小结
2015/01/23 PHP
ThinkPHP框架实现的MySQL数据库备份功能示例
2018/05/24 PHP
php快速导入大量数据的实例方法
2019/09/23 PHP
JavaScript Scoping and Hoisting 翻译
2012/07/03 Javascript
js单独获取一个checkbox看其是否被选中
2014/09/22 Javascript
JavaScript Math.ceil 方法(对数值向上取整)
2015/01/09 Javascript
jQuery实现拖动调整表格单元格大小的代码实例
2015/01/13 Javascript
浅谈javascript事件取消和阻止冒泡
2015/05/26 Javascript
基于BootStarp的Dailog
2016/04/28 Javascript
jQuery+HTML5+CSS3制作支持响应式布局时间轴插件
2016/08/10 Javascript
JavaScript中String对象的方法介绍
2017/01/04 Javascript
Vue.js实战之Vuex的入门教程
2017/04/01 Javascript
Angular7创建项目、组件、服务以及服务的使用
2019/02/19 Javascript
layui自己添加图片按钮并点击跳转页面的例子
2019/09/14 Javascript
Python实现的批量下载RFC文档
2015/03/10 Python
python通过函数属性实现全局变量的方法
2015/05/16 Python
python实现识别相似图片小结
2016/02/22 Python
Python读大数据txt
2016/03/28 Python
在Django同1个页面中的多表单处理详解
2017/01/25 Python
Python实现的远程文件自动打包并下载功能示例
2019/07/12 Python
TensorFlow2.0矩阵与向量的加减乘实例
2020/02/07 Python
python 判断txt每行内容中是否包含子串并重新写入保存的实例
2020/03/12 Python
时尚的CSS3进度条效果
2012/02/22 HTML / CSS
英国最大的独立玩具专卖店:The Entertainer
2019/09/06 全球购物
用Java语言将一个键盘输入的数字转化成中文输出
2013/01/25 面试题
文明礼仪事迹材料
2014/01/09 职场文书
二手房买卖协议书
2014/04/10 职场文书
环保标语口号
2014/06/13 职场文书
长城英文导游词
2015/01/30 职场文书
关于成立领导小组的通知
2015/04/23 职场文书
2016年社会管理综治宣传月活动总结
2016/03/16 职场文书
零基础学java之方法的定义与调用详解
2022/04/10 Java/Android