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的汉字转GBK码实现代码
Feb 19 Python
Python实现字符串格式化输出的方法详解
Sep 20 Python
Python基础语言学习笔记总结(精华)
Nov 14 Python
Django中login_required装饰器的深入介绍
Nov 24 Python
基于numpy.random.randn()与rand()的区别详解
Apr 17 Python
机器学习之KNN算法原理及Python实现方法详解
Jul 09 Python
python实现网站用户名密码自动登录功能
Aug 09 Python
python中类的输出或类的实例输出为这种形式的原因
Aug 12 Python
Python中zip()函数的简单用法举例
Sep 02 Python
pytorch实现对输入超过三通道的数据进行训练
Jan 15 Python
windows下python安装pip方法详解
Feb 10 Python
baselines示例程序train_cartpole.py的ImportError
May 20 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写入数据库类代码分享
2011/07/26 PHP
web server使用php生成web页面的三种方法总结
2013/10/28 PHP
使用Codeigniter重写insert的方法(推荐)
2017/03/23 PHP
tp5(thinkPHP5)框架实现多数据库查询的方法
2019/01/10 PHP
Yii框架布局文件的动态切换操作示例
2019/11/11 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
2020/02/27 PHP
JavaScript 学习笔记(十三)Dom创建表格
2010/01/21 Javascript
禁止页面刷新让F5快捷键及右键都无效
2014/01/22 Javascript
清除div下面的所有标签的方法
2014/02/17 Javascript
js的flv视频播放器插件使用方法
2015/06/23 Javascript
WebGL利用FBO完成立方体贴图效果完整实例(附demo源码下载)
2016/01/26 Javascript
Summernote实现图片上传功能的简单方法
2016/07/11 Javascript
详解JavaScript中数组的reduce方法
2016/12/02 Javascript
JS原型与原型链的深入理解
2017/02/15 Javascript
简单谈谈React中的路由系统
2017/07/25 Javascript
vue-cli axios请求方式及跨域处理问题
2018/03/28 Javascript
微信小程序scroll-view实现字幕滚动
2018/07/14 Javascript
jQuery实现简单弹幕制作
2020/12/10 jQuery
[01:13]这,就是刀塔
2014/07/16 DOTA
Python中使用hashlib模块处理算法的教程
2015/04/28 Python
深入理解Python中各种方法的运作原理
2015/06/15 Python
基于python socketserver框架全面解析
2017/09/21 Python
python导出hive数据表的schema实例代码
2018/01/22 Python
Python 获得命令行参数的方法(推荐)
2018/01/24 Python
PyQt5显示GIF图片的方法
2019/06/17 Python
python实现文本进度条 程序进度条 加载进度条 单行刷新功能
2019/07/03 Python
Python迭代器Iterable判断方法解析
2020/03/16 Python
python 基于DDT实现数据驱动测试
2021/02/18 Python
css3新增颜色表示方式分享
2014/04/15 HTML / CSS
分享CSS3制作卡片式图片的方法
2016/07/08 HTML / CSS
快速创建 HTML5 Canvas 电信网络拓扑图的示例代码
2018/03/21 HTML / CSS
雅虎笔试题(字符串操作)
2015/03/24 面试题
12月红领巾广播稿
2014/02/13 职场文书
家长对孩子的感言
2014/03/10 职场文书
领导班子个人对照检查剖析材料
2014/09/29 职场文书
工程款申请报告
2015/05/15 职场文书