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 相关文章推荐
Windows下安装Django框架的方法简明教程
Mar 28 Python
python批量导入数据进Elasticsearch的实例
May 30 Python
使用python的pandas为你的股票绘制趋势图
Jun 26 Python
python分数表示方式和写法
Jun 26 Python
Python pandas.DataFrame 找出有空值的行
Sep 09 Python
python用quad、dblquad实现一维二维积分的实例详解
Nov 20 Python
python GUI库图形界面开发之PyQt5滚动条控件QScrollBar详细使用方法与实例
Mar 06 Python
python能在浏览器能运行吗
Jun 17 Python
pycharm如何使用anaconda中的各种包(操作步骤)
Jul 31 Python
Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告
Jan 27 Python
pytorch 权重weight 与 梯度grad 可视化操作
Jun 05 Python
使用python+pygame开发消消乐游戏附完整源码
Jun 10 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
linux命令之调试工具strace的深入分析
2013/06/03 PHP
laravel手动创建数组分页的实现代码
2018/06/07 PHP
(仅IE下有效)关于checkbox 三态
2007/05/12 Javascript
extjs_02_grid显示本地数据、显示跨域数据
2014/06/23 Javascript
js中函数声明与函数表达式
2015/06/03 Javascript
兼容各大浏览器的JavaScript阻止事件冒泡代码
2015/07/09 Javascript
json实现添加、遍历与删除属性的方法
2016/06/17 Javascript
AngularJS使用指令增强标准表单元素功能
2016/07/01 Javascript
微信小程序 scroll-view组件实现列表页实例代码
2016/12/14 Javascript
原生js实现倒计时--2018
2017/02/21 Javascript
TypeScript入门-基本数据类型
2017/03/28 Javascript
vue组件学习教程
2017/09/09 Javascript
JavaScript学习笔记之DOM操作实例分析
2019/01/08 Javascript
JS实现的贪吃蛇游戏完整实例
2019/01/18 Javascript
8 个有用的JS技巧(推荐)
2019/07/03 Javascript
微信小程序实现限制用户转发功能的实例代码
2020/02/22 Javascript
[52:20]VP vs VG Supermajor小组赛 B组胜者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
基于Python中capitalize()与title()的区别详解
2017/12/09 Python
python修改list中所有元素类型的三种方法
2018/04/09 Python
Python实现简单的用户交互方法详解
2018/09/25 Python
对Python3 解析html的几种操作方式小结
2019/02/16 Python
Python 通过打码平台实现验证码的实现
2019/05/13 Python
python判断变量是否为列表的方法
2020/09/17 Python
python中的垃圾回收(GC)机制
2020/09/21 Python
Python用户自定义异常的实现
2020/12/25 Python
手把手教你配置JupyterLab 环境的实现
2021/02/02 Python
戴尔英国官网:Dell英国
2017/05/27 全球购物
伦敦鲜花递送:Flower Station
2021/02/03 全球购物
WEB控件可以激发服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为什么要使用自动传回?
2012/02/21 面试题
最新党员思想汇报
2014/01/01 职场文书
开办大学饮食联盟创业计划书
2014/01/29 职场文书
社区交通安全实施方案
2014/03/22 职场文书
劳动竞赛活动总结
2014/05/05 职场文书
《中华上下五千年》读后感3篇
2019/11/29 职场文书
golang正则之命名分组方式
2021/04/25 Golang
基于Python实现的购物商城管理系统
2021/04/27 Python