1、认识正则表达 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。 ...利用正则我们可以达到如下的目的:1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。 特点是:1. ...2、正则表达组成 正则表达式由一些普通字符(包括大小写的字母和数字所有标点符号以及一些符号)和一些元字符(特殊的字符)组成 3、元字符 列举常用元字符 $ 匹配内容结束位置(eg:/joyous$/...,这个是匹配joyus结尾) () 标记子匹配模块,后面可以使用\1、\2……来取代(eg:/(0-9)[a-z]\1/,这是匹配“数字字母数字”的) * 匹配前面内容零次或者多次 + ...,这样[0-9]就等同于\d 4.修正符 i不区分大小写 x忽略内容的空白 U贪婪匹配只匹配到最近的就停止匹配 m在匹配时候采用多行模式匹配 A强制从头开始匹配 D匹配结束标志为\n 可以使用RegexTester
正则表达式入门 概念 字符是计算机软件处理文字时最基本的单位,可能是字母,数字,标点符号,空格,换行符,汉字等等。字符串是0个或更多个字符的序列。文本也就是文字,字符串。...^代表每一行的开始,$代表每一行的结束 ^$ 匹配空行 ^foot$ 匹配只有foot一个词的行 元字符的出现可以理解为方便书写 基础元字符表 代码 说明 ....匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字 \W 匹配任意不是字母或数字或下划线或汉字的字符 \s 匹配任意的空白符 \S 匹配任意非空白符 \d 匹配数字 \D 匹配非数字 \b...匹配单词的开始或结束 ^ 匹配字符串的开始 $ 匹配字符串的结束 转义 如果要匹配 C:\\WINDOWS,我们要如何描述\反斜杠呢?...即在原本的条件左边附加(?<=expression)。 现在需要找出字母a后面是一个字母d或者是数字的词,我们使用a(?=(\d|d)),即可达到效果。即在原本的条件右边附加(?
很简单: scanf("%[^\n]",s); 这里的意思就是说,除了换行符,其他字符都读入,也就是说前面的空字符也会被读取,就达到了我们的目的了。...忽略开头的换行符 如果我们一开始就按回车,你会发现,s什么都没有读入,如何忽略开始的换行呢?...我们知道,在scanf中,*是跳过相应的字符项,比如,跳过开头的两个数字: // 来源:公众号【编程珠玑】 // 作者:守望先生 #include int main(void) {...丢弃特定字符 最开始的例子中,如果开头是字母,即便想读取数字,也读取不到,那么如何跳过开头的字母呢?...总结 scanf是我们刚开始学习C就会接触的函数,除了基本的用法,今天的用法你是否曾经见过呢? scanf读取内容会跳过开头的空白字符,遇到换行符或者不是目标字符时结束读取。
白底黑字的“字母 + 数字”表示飞机,如果数字是 1 位数则代表该飞机的高度为几千英尺。大写字母表示螺旋桨飞机,小写字母表示喷气式飞机。...飞入的飞机总是以 7000 英尺的高度飞行;一架飞机要成功地飞出一个出口,高度必须在 9000 英尺。飞机离开时没有必要朝任何特定方向飞行。...在游戏中主要有以下操作: 起飞飞机(增加停在机场的飞机的高度); 着陆飞机(指示飞机恰好在机场正上方时高度为 0); 操纵飞机从出口离开。...它表示只有当飞机到达特定信标(或未来版本中的其他对象)时,指令才会执行。 当飞机 到达指定信标(at beacon)时执行延迟命令: ab [0-9]。 信标 b 将在未来版本中可以替换成其他对象。...注释以井号 # 开始,以换行符结束。坐标在 (0, 0) 和 (宽度-1, 高度-1) 之间(含)。所有出口坐标必须位于边界上,所有信标和机场必须位于边界内。
m:多行匹配(multiline);将开始和结束字符(^和$)视为在多行上工作,即分别匹配每一行(由 \n 或 \r 分割)的开始和结束,而不只是只匹配整个输入字符串的最开始和最末尾处 Flags可以组合使用...]:匹配从 "a" 到 "z" 的任意字符 [^a-n]:补集,匹配除"a" 到 "n"的其他字符 [A-Z]:匹配从 "A"到 "Z" 的任意字符 [0-9]:匹配从 "0" 到"9" 的任意数字 比如匹配所有的字母和数字可以写成...常见的元字符有: \d:匹配任意数字,等价于 [0-9] \D:匹配任意非数字字符;\d 的补集 \w:匹配任意基本拉丁字母表中的字母和数字,以及下划线;等价于 [A-Za-z0-9_] \W:匹配任意非基本拉丁字母表中的字母和数字....)/.exec('3.141') 匹配 "141",而不是 "3.141" 应用 上面罗列出了这么多正则表达式的语法和规则,可以在一定程度上帮助我们分析和理解一段正则表达式的作用,但是如何将这些规则组合并创造出有特定作用的表达式还需要我们自己多加练习..., 每部分的格式标准为(进行了相应的简化,主要为展示如何书写正则): yourname:任意英文字母(a-z/A-Z)、数字(0-9)、下划线
常见的flags有: g:全局匹配(global);正则表达式默认只会返回第一个匹配结果,使用标志符g则可以返回所有匹配 i:忽略大小写(case-insensitive);在匹配时忽略英文字母的大小写...m:多行匹配(multiline);将开始和结束字符(^和$)视为在多行上工作,即分别匹配每一行(由 \n 或 \r 分割)的开始和结束,而不只是只匹配整个输入字符串的最开始和最末尾处 Flags可以组合使用...常见的元字符有: \d:匹配任意数字,等价于 [0-9] \D:匹配任意非数字字符;\d 的补集 \w:匹配任意基本拉丁字母表中的字母和数字,以及下划线;等价于 [A-Za-z0-9_] \W:匹配任意非基本拉丁字母表中的字母和数字....)/.exec('3.141') 匹配 "141",而不是 "3.141" 应用 上面罗列出了这么多正则表达式的语法和规则,可以在一定程度上帮助我们分析和理解一段正则表达式的作用,但是如何将这些规则组合并创造出有特定作用的表达式还需要我们自己多加练习..., 每部分的格式标准为(进行了相应的简化,主要为展示如何书写正则): yourname:任意英文字母(a-z/A-Z)、数字(0-9)、下划线
常见的flags有: g:全局匹配(global);正则表达式默认只会返回第一个匹配结果,使用标志符g则可以返回所有匹配 i:忽略大小写(case-insensitive);在匹配时忽略英文字母的大小写...m:多行匹配(multiline);将开始和结束字符(^和$)视为在多行上工作,即分别匹配每一行(由 \n 或 \r 分割)的开始和结束,而不只是只匹配整个输入字符串的最开始和最末尾处 Flags可以组合使用...常见的元字符有: \d:匹配任意数字,等价于 [0-9] \D:匹配任意非数字字符;\d 的补集 \w:匹配任意基本拉丁字母表中的字母和数字,以及下划线;等价于 [A-Za-z0-9_] \....)/.exec('3.141') 匹配 "141",而不是 "3.141" 应用 上面罗列出了这么多正则表达式的语法和规则,可以在一定程度上帮助我们分析和理解一段正则表达式的作用,但是如何将这些规则组合并创造出有特定作用的表达式还需要我们自己多加练习..., 每部分的格式标准为(进行了相应的简化,主要为展示如何书写正则): yourname:任意英文字母(a-z/A-Z)、数字(0-9)、下划线
它真的只是解决一个特定的问题的一系列步骤。无论你是否意识到,你都在使用算法。如果你需要给孩子们打包午饭,送他们上学,取走干洗的衣服,然后去上班,你已经无意识地构造了一系列步骤,从厨房到办公室。...只要你前后一致,字母本身是什么并不重要。 但是,一些特定的大写字母和符号被保留下来,用来表示重要的、常用的数字集,例如: ∅ = 空集(集合里什么都没有)。这个符号是一个希腊字母,“phi”。...假如我们有一个数字序列,以1为步长递增。我们可以这样写: x = {1,2,3,4…n} 这些点表示这个序列到n结束,n代表“序列的末尾”。所以如果n = 10,这个集合包括从1到10的数字范围。...首先,你需要知道如何引用矩阵的不同部分。 这张图讲得很清楚: 首先我们有矩阵A。用大写字母表示。 矩阵有m行和n列,所以我们叫它m X n 矩阵,用小写斜体字母表示。 行是水平的,也就是从左到右。...胜在学习策略 我想用一些可以帮你快速学习的策略来结束这篇文章。 我是一个自学者,也就是我一般自己给自己讲解。当我可以放慢脚步,可以自己探索时,我可以学得更好。我会犯一些错误。
这个循环对于5的计数是必要的并且列印出每一个数字。那么,它又是如何输出这些数字的呢?当For循环被创建,range函数默认以0为开头并将0值分配给暂时变量num。我们称每一次循环为迭代。...---- range() Range函数允许我们对一个范围计数,当能够定义从哪开始和在哪结束以及我们需要增加多少和减少多少。这就意味着我们可以计数每一个数字,如果你需要,还可以计数每5个数字。...使用一个For循环,它能够让我们有能力循环一个代码的特定次数。在之前的例子中,我们看到数字为5时,列印出5个数字。这是因为range函数默认为从0开始并且每次以步长1增加。...这次我们设定项目从数字2开始循环,每次间隔2并到10结束。这时我们输出的值就变为“2, 4, 6, 8”。 元素循环 当了解到可迭代的数据类型如何工作,这就意味着它们有一个能够实现循环的元素收集器。...2.只列印出元音字母:定下一个for循环,列印出用户输入的单词(小写)中的所有元音字母。
@TOC字符串常用方法字符串在编程中是一种不可或缺的数据类型,它在文本和字符数据时提供了丰富而强大的功能。...)isalnum() 检查字符串是否只包含字母和数字字符 isalpha() 检查字符串是否只包含字母字符...rfind(substring, start, end)从右侧开始查找子字符串,并返回索引 rindex(substring, start, end)从右侧开始查找子字符串,并返回索引...(从右边开始)rsplit(separator, maxsplit)从右侧开始以指定分隔符分割字符串 rstrip(characters) 移除字符串右边指定的字符...zfill(width) 在字符串左侧填充0直到达到指定宽度 以上几乎涵盖了所有字符串操作的方法,当然可能会有一些遗漏,欢迎指出
学习正则表达式的最好方法是从例子开始,理解例子之后再自己对例子进行修改实践。...3.正则匹配的用途 匹配验证: 判断给定的字符串是否符合正则表达式所指定的过滤规则,从而可以判断某个字符串的内容是否符合特定的规则(如email地址、手机号码等),当正则表达式用于匹配验证时,通常需要在正则表达式字符串的首部和尾部加上...匹配除换行符以外的任意字符 \ 将下一个字符标记为一个特殊字符 \w 匹配字母,数字,下划线或汉字 \s 匹配任意的空白符 \d 匹配数字,等价于[0-9] \b 匹配单词的开始或结束 ^ 匹配字符串的开始...$ 匹配字符串的结束 [abc] 字符组,匹配包含括号内元素的字符 2.反义字符 代码/语法 说明 \W 匹配任意不是字母,数字,下划线,汉字的字符 \S 匹配任意不是空白符的字符 \D 匹配任意非数字的字符...从匹配效率上来看,能达到相同匹配结果时,贪婪模式的匹配效率通常会比较高,因为它回溯过程会比较少。 5.捕获分组 代码/语法 说明 (exp) 匹配exp,并捕获文本到自动命名的组里 (?
tokenList = infixexpr.split() for token in tokenList: # 这里用到的是string模块中的两个方法,源代码都是手敲的字母和数字...3、当token==“(”时,opstack中存入“(”,因为转换成后缀就不需要用“()”表示优先级,存起来是用于做优先级的判断 ?...4、当token为字母时,会添加到postfixList(postfixList是用于存放最终结果的列表) ?...8、传入“ * ”,由于上一次传值opstack内元素删光了,直接跳出while循环并在opstack中添加“ * ” ? 9、传入字母,将添加到postfixList ?...14、传入字母,将添加到postfixList ? 15、传入“)”--> 将“ - ”从opstack中删除并追加到postfixList中 --> 删除“(” ?
这4个数字作为向量 (或数组) 提供给智能体,这非常重要:将状态作为一组数字意味着智能体能够对它进行一些数学运算,以便决定如何根据状态来采取什么行动。...在智能体采取相应的操作后,游戏将以下一个状态更新,此时将再次根据其输入策略做出决策,这个过程一直持续到游戏达到某个终止条件时结束。...import gym import numpy as np env = gym.make('CartPole-v1') 下面从函数定义开始,将游戏重置为开始状态,如下所示。...那么,如何选择一些游戏策略,并在游戏结束时只保留那个结果最好的策略呢?在这里,制定游戏时并不只是生成一个策略,而是通过编写一个循环来生成一些策略,跟踪每个策略的执行情况并在最后保存最佳的策略。...通过这种方式,能够完美地观察游戏策略是如何让杆达到平衡的! ? 如何加速? (1)这里智能体达到平衡的速度并不够块。回想前面制定策略时,首先只是在0到1范围内随机创建了策略数组,这恰好是有效的。
这4个数字作为向量 (或数组) 提供给智能体,这非常重要:将状态作为一组数字意味着智能体能够对它进行一些数学运算,以便决定如何根据状态来采取什么行动。...在智能体采取相应的操作后,游戏将以下一个状态更新,此时将再次根据其输入策略做出决策,这个过程一直持续到游戏达到某个终止条件时结束。...import gym import numpy as np env = gym.make('CartPole-v1') 下面从函数定义开始,将游戏重置为开始状态,如下所示。...那么,如何选择一些游戏策略,并在游戏结束时只保留那个结果最好的策略呢?在这里,制定游戏时并不只是生成一个策略,而是通过编写一个循环来生成一些策略,跟踪每个策略的执行情况并在最后保存最佳的策略。...通过这种方式,能够完美地观察游戏策略是如何让杆达到平衡的! 如何加速? (1)这里智能体达到平衡的速度并不够块。回想前面制定策略时,首先只是在0到1范围内随机创建了策略数组,这恰好是有效的。
通过正则表达式可以达到如下的目的: 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”); 可以通过正则表达式,从字符串中获取我们想要的特定部分。 2....[A-z] 匹配从 ASCII A 到 ASCII z 的所有字符(不仅仅匹配所有字母,还匹配在 ASCII 表中 A 到 z 中的字符,如 [ 和 ^ 等)。...自定义字符串边界 字符串边界匹配的元字符是^和$,分别用于字符串的开始和结束。...在多行模式下,正则表达式引擎将换行符作为字符串的分隔符,^将匹配文本的开始或者一行的开始,而$则可以匹配文本的结束或者是一行的结尾处。 修改下上个例子: 正则表达式:(?...m)^[0-9a-zA-Z]{4,}$会去匹配每行用数字或者字母组成的,并且位数大于等于四位的字符串。 注意:如果使用多行模式的话,(?m)必须放置在正则表达式的开始。 (?
慎用小写字母 l 和大写字母 O ,因为它们可能被人错看成数字 1 和 0 。 要创建良好的变量名,需要经过一定的实践,在程序复杂而有趣时尤其如此。...3.1 列表是什么 列表 由一系列按特定顺序排列的元素组成。你可以创建包含字母表中所有字母、数字 0~9 或所有家庭成员姓名的列表;也可以将任何东西加入列表中,其中的元素之间可以没有任何关系。...3.3.4 确定列表的长度 使用函数 len() 可快速获悉列表的长度。 注意 Python 计算列表元素数时从 1 开始,因此确定列表长度时,你应该不会遇到差一错误。...函数 range() 让 Python 从你指定的第一个值开始数,并在到达你指定的第二个值后停止,因此输出不包含第二个值(这里为 5 )。...在这个示例中,函数 range() 从 2 开始数,然后不断地加 2 ,直到达到或超过终值( 11 ),因此输出如下: 使用函数 range() 几乎能够创建任何需要的数字集,例如,如何创建一个列表,
当需要在单元格区域中找到某个值时,可以使用MATCH函数。在单元格中查找特定字符串时,FIND函数和SEARCH函数非常方便。如何知道单元格中是否包含与给定模式匹配的信息?...如何使用正则表达式在Excel中匹配字符串 当所有要匹配的字符串都具有相同的模式时,正则表达式是理想的解决方案。...模式:\b[A-Z]{2}-\d{3}\b 其中,[A-Z]{2}表示从A到Z的任意2个大写字母,\d{3}表示从0到9的任意3个数字。...如果没有“lemons”,则该点与除换行符以外的任何字符匹配。上面的表达式只执行一次检查,*量词重复它零次或多次,从由^定位的字符串开始到由$定位的字符串结束。...记住\w匹配任何字母、数字或下划线,我们得到以下正则表达式:[\w\.\-]+ 域名可能包括大小写字母、数字、连字符(但不在第一个或最后一个位置)和点(在子域的情况下)。
领取专属 10元无门槛券
手把手带您无忧上云