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简单进程锁代码实例
Apr 27 Python
Python实现的中国剩余定理算法示例
Aug 05 Python
Python中支持向量机SVM的使用方法详解
Dec 26 Python
python 从csv读数据到mysql的实例
Jun 21 Python
Python 中字符串拼接的多种方法
Jul 30 Python
Python之NumPy(axis=0 与axis=1)区分详解
May 27 Python
PyCharm 2019.3发布增加了新功能一览
Dec 08 Python
Python 定义只读属性的实现方式
Mar 05 Python
python3+openCV 获取图片中文本区域的最小外接矩形实例
Jun 02 Python
Python如何实现后端自定义认证并实现多条件登陆
Jun 22 Python
Python调用飞书发送消息的示例
Nov 10 Python
如何使用Python实现一个简易的ORM模型
May 12 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 解决旧系统 查出所有数据分页的类
2012/08/27 PHP
php函数指定默认值方法的小例子
2013/12/04 PHP
destoon实现调用热门关键字的方法
2014/07/15 PHP
PHP实现图片上传并压缩
2015/12/22 PHP
PHP编写学校网站上新生注册登陆程序的实例分享
2016/03/21 PHP
浅谈PHP检查数组中是否存在某个值 in_array 函数
2016/06/13 PHP
PHP的PDO大对象(LOBs)
2019/01/27 PHP
PHP压缩图片功能的介绍
2019/03/21 PHP
通过修改referer下载文件的方法
2008/05/11 Javascript
ASP Json Parser修正版
2009/12/06 Javascript
Javascript实现DIV滚动自动滚动到底部的代码
2012/03/01 Javascript
封装html的select标签的js操作实例
2013/07/02 Javascript
网页广告中JS代码的信息监听示例
2014/04/02 Javascript
jQuery.trim() 函数及trim()用法详解
2015/10/26 Javascript
使用jQuery或者原生js实现鼠标滚动加载页面新数据
2016/03/06 Javascript
jQuery中Datatables增加跳转到指定页功能
2017/02/08 Javascript
JS实现的简单图片切换功能示例【测试可用】
2017/02/14 Javascript
Vue.js如何实现路由懒加载浅析
2017/08/14 Javascript
Vue中mintui的field实现blur和focus事件的方法
2018/08/25 Javascript
基于three.js实现的3D粒子动效实例代码
2019/04/09 Javascript
微信小程序 函数防抖 解决重复点击消耗性能问题实现代码
2019/09/12 Javascript
keep-alive不能缓存多层级路由菜单问题解决
2020/03/10 Javascript
利用Python画ROC曲线和AUC值计算
2016/09/19 Python
Python实现调度算法代码详解
2017/12/01 Python
基于python 爬虫爬到含空格的url的处理方法
2018/05/11 Python
python批量爬取下载抖音视频
2019/06/17 Python
python绘制直方图和密度图的实例
2019/07/08 Python
Python SQLAlchemy入门教程(基本用法)
2019/11/11 Python
浅谈Django中的QueryDict元素为数组的坑
2020/03/31 Python
使用CSS3的背景渐变Text Gradient 创建文字颜色渐变
2014/08/19 HTML / CSS
康帕斯酒店预订:Compass Hospitality(支持中文)
2018/08/23 全球购物
新加坡鲜花速递/新加坡网上花店:Ferns N Petals
2020/08/29 全球购物
俄语专业毕业生求职信
2014/07/12 职场文书
2014年医药代表工作总结
2014/11/22 职场文书
撤诉书怎么写
2015/05/19 职场文书
pycharm 如何查看某一函数源码的快捷键
2021/05/12 Python