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操作MongoDB基础知识
Nov 01 Python
pygame学习笔记(3):运动速率、时间、事件、文字
Apr 15 Python
简单讲解Python中的闭包
Aug 11 Python
Python实现周期性抓取网页内容的方法
Nov 04 Python
Python控制多进程与多线程并发数总结
Oct 26 Python
Tensorflow的可视化工具Tensorboard的初步使用详解
Feb 11 Python
值得收藏的10道python 面试题
Apr 15 Python
pytorch神经网络之卷积层与全连接层参数的设置方法
Aug 18 Python
通过 Django Pagination 实现简单分页功能
Nov 11 Python
pycharm实现在虚拟环境中引入别人的项目
Mar 09 Python
Python 在函数上添加包装器
Jul 28 Python
python3中编码获取网页的实例方法
Nov 16 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
缅甸的咖啡简史
2021/03/04 咖啡文化
基于文本的访客签到簿
2006/10/09 PHP
图片存储与浏览一例(Linux+Apache+PHP+MySQL)
2006/10/09 PHP
PHP中for循环语句的几种变型
2006/11/26 PHP
php简单浏览目录内容的实现代码
2013/06/07 PHP
php实现Mysql简易操作类
2015/10/11 PHP
经验几则 推荐
2006/09/05 Javascript
js 实现复制到粘贴板的功能代码
2010/05/13 Javascript
JS面向对象编程 for Cookie
2010/09/19 Javascript
Javascript 中 null、NaN和undefined的区别总结
2013/04/10 Javascript
JavaScript实现网页上的浮动广告的简单方法
2013/06/14 Javascript
jQuery中bind,live,delegate与one方法的用法及区别解析
2013/12/30 Javascript
javascript(js)的小数点乘法除法问题详解
2014/03/07 Javascript
Web开发必知Javascript技巧大全
2016/02/23 Javascript
Nodejs抓取html页面内容(推荐)
2016/08/11 NodeJs
js实现刷新页面后回到记录时滚动条的位置【两种方案可选】
2016/12/12 Javascript
Vue.js中用webpack合并打包多个组件并实现按需加载
2017/02/17 Javascript
微信小程序 页面跳转如何实现传值
2017/04/05 Javascript
jQuery鼠标悬停内容动画切换效果
2017/04/27 jQuery
微信小程序实现随机验证码功能
2018/12/20 Javascript
微信小程序系列之自定义顶部导航功能
2019/05/21 Javascript
浅谈pyhton学习中出现的各种问题(新手必看)
2017/05/17 Python
Django 请求Request的具体使用方法
2019/11/11 Python
Django认证系统user对象实现过程解析
2020/03/02 Python
Jupyter加载文件的实现方法
2020/04/14 Python
使用canvas绘制超炫时钟
2014/12/17 HTML / CSS
html svg生成环形进度条的实现方法
2019/09/23 HTML / CSS
Vichy薇姿加拿大官网:法国药妆,全球专业敏感肌护肤领先品牌
2018/07/11 全球购物
商务助理岗位职责
2013/11/13 职场文书
投标单位介绍信
2014/01/09 职场文书
群众路线领导班子四风对照检查材料
2014/09/27 职场文书
农业项目投资意向书
2015/05/09 职场文书
销售会议开幕词
2016/03/04 职场文书
适合后台管理系统开发的12个前端框架(小结)
2021/06/29 Javascript
php去除deprecated的实例方法
2021/11/17 PHP
Python代码实现双链表
2022/05/25 Python