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回溯法实现数组全排列输出实例分析
Mar 17 Python
Python bsddb模块操作Berkeley DB数据库介绍
Apr 08 Python
Python中用函数作为返回值和实现闭包的教程
Apr 27 Python
python操作 hbase 数据的方法
Dec 18 Python
用Python写王者荣耀刷金币脚本
Dec 21 Python
python opencv人脸检测提取及保存方法
Aug 03 Python
Python对HTML转义字符进行反转义的实现方法
Apr 28 Python
python opencv 读取图片 返回图片某像素点的b,g,r值的实现方法
Jul 03 Python
Python argparse模块应用实例解析
Nov 15 Python
手动安装python3.6的操作过程详解
Jan 13 Python
Python中if有多个条件处理方法
Feb 26 Python
Python实现手绘图效果实例分享
Jul 22 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 CURD方法之page方法详解
2014/06/18 PHP
php实现utf-8转unicode函数分享
2015/01/06 PHP
PHP中empty,isset,is_null用法和区别
2017/02/19 PHP
Laravel 框架路由原理与路由访问实例分析
2020/04/14 PHP
利用javascript移动div层-javascript 拖动层
2009/03/22 Javascript
下载文件个别浏览器文件名乱码解决办法
2013/03/19 Javascript
JavaScript使用pop方法移除数组最后一个元素用法实例
2015/04/06 Javascript
jQuery中$(function() {});问题详解
2015/08/10 Javascript
小发现之浅谈location.search与location.hash的问题
2017/06/23 Javascript
使用Bootstrap + Vue.js实现表格的动态展示、新增和删除功能
2017/11/27 Javascript
JS实现简单的浮动碰撞效果示例
2017/12/28 Javascript
JS计算两个时间相差分钟数的方法示例
2018/01/10 Javascript
vue移动端UI框架实现QQ侧边菜单组件
2018/03/09 Javascript
让axios发送表单请求形式的键值对post数据的实例
2018/08/11 Javascript
使用webpack构建应用的方法步骤
2019/03/04 Javascript
vue中实现上传文件给后台实例详解
2019/08/22 Javascript
js数组的基本使用总结
2021/01/18 Javascript
实例讲解Python3中abs()函数
2019/02/19 Python
对Pytorch神经网络初始化kaiming分布详解
2019/08/18 Python
python配置文件写入过程详解
2019/10/19 Python
Python内置数据类型list各方法的性能测试过程解析
2020/01/07 Python
python实现替换word中的关键文字(使用通配符)
2020/02/13 Python
python pandas dataframe 去重函数的具体使用
2020/07/20 Python
paramiko使用tail实时获取服务器的日志输出详解
2020/12/06 Python
Bibloo荷兰:女士、男士和儿童的服装、鞋子和配饰
2019/02/25 全球购物
罗马尼亚购物网站:Vivantis.ro
2019/07/20 全球购物
荷兰家电销售网站:Welhof
2020/12/08 全球购物
读书心得体会
2013/12/28 职场文书
茶叶店创业计划书范文
2014/01/19 职场文书
不拖欠农民工工资承诺书
2014/03/31 职场文书
班干部竞选演讲稿
2014/04/24 职场文书
大学同学会活动方案
2014/08/20 职场文书
乡镇镇长个人整改措施
2014/10/01 职场文书
房屋出售授权委托书
2014/10/12 职场文书
小学生作文批改评语
2014/12/25 职场文书
使用logback实现按自己的需求打印日志到自定义的文件里
2021/08/30 Java/Android