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编程中的反模式实例分析
Dec 08 Python
在Python中用split()方法分割字符串的使用介绍
May 20 Python
python简单实现基于SSL的IRC bot实例
Jun 15 Python
Python错误提示:[Errno 24] Too many open files的分析与解决
Feb 16 Python
python自动发送邮件脚本
Jun 20 Python
pyqt5 实现在别的窗口弹出进度条
Jun 18 Python
详解python中的time和datetime的常用方法
Jul 08 Python
django 配置阿里云OSS存储media文件的例子
Aug 20 Python
python datetime中strptime用法详解
Aug 29 Python
关于numpy中eye和identity的区别详解
Nov 29 Python
python+selenium+Chrome options参数的使用
Mar 18 Python
django迁移文件migrations的实现
Mar 31 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
THINKPHP截取中文字符串函数实例代码
2017/03/20 PHP
javascript:void(0)的真正含义实例分析
2008/08/20 Javascript
使用IE6看老赵的博客 jQuery初探
2010/01/17 Javascript
jquery ready()的几种实现方法小结
2010/06/18 Javascript
js实现简单排列组合的方法
2016/01/27 Javascript
JQuery组件基于Bootstrap的DropDownList(完整版)
2016/07/05 Javascript
jquery实现全选、不选、反选的两种方法
2016/09/06 Javascript
jQuery中clone()函数实现表单中增加和减少输入项
2017/05/13 jQuery
JavaScript动态绑定详解
2017/09/14 Javascript
解决在vue+webpack开发中出现两个或多个菜单公用一个组件问题
2017/11/28 Javascript
快速解决vue-cli不能初始化webpack模板的问题
2018/03/20 Javascript
简单的vuex 的使用案例笔记
2018/04/13 Javascript
详解js加减乘除精确计算
2019/03/19 Javascript
koa+mongoose实现简单增删改查接口的示例代码
2019/05/13 Javascript
Vuex的实战使用详解
2019/10/31 Javascript
JS+CSS实现炫酷光感效果
2020/09/05 Javascript
JQuery绑定事件四种实现方法解析
2020/12/02 jQuery
[13:39]2014 DOTA2华西杯精英邀请赛 5 25 NewBee VS DK第一场
2014/05/26 DOTA
[02:49:21]2019完美盛典全程录像
2019/12/08 DOTA
python选择排序算法实例总结
2015/07/01 Python
Python Web程序部署到Ubuntu服务器上的方法
2018/02/22 Python
Python 利用高德地图api实现经纬度与地址的批量转换
2019/08/14 Python
python实现的汉诺塔算法示例
2019/10/23 Python
Python bytes string相互转换过程解析
2020/03/05 Python
Python3.7安装pyaudio教程解析
2020/07/24 Python
土耳其家居建材网站:Koçtaş
2016/11/22 全球购物
日本7net购物网:书籍、漫画、杂志、DVD、游戏邮购
2017/02/17 全球购物
经典优秀毕业生求职信范文分享
2013/12/18 职场文书
会议活动邀请函
2014/01/27 职场文书
食品厂厂长岗位职责
2014/01/30 职场文书
小学二年级评语
2014/04/21 职场文书
小学安全教育月活动总结
2014/07/07 职场文书
人大调研汇报材料
2014/08/14 职场文书
写给妈妈的感谢信
2015/01/22 职场文书
vue 自定义的组件绑定点击事件
2022/04/21 Vue.js
2022微信温控新功能上线
2022/05/09 数码科技