Products
GG网络技术分享 2025-03-18 16:15 0
用户输入一句话,并利用正则表达式中的split函数,对其中的字符利用多个逗号、多个空格和多个圆点进行拆分,并将返回后的拆分结果利用字符”*”连接起来。
只会拆分,不知道怎么连接
a=input()import re
re.split('[\\,|\\ |\\.]+',a)
a=input()import re
print('*'.join(re.split('[\\,|\\ |\\.]+',a)))
有帮助请采纳,有问题继续交流,你的采纳是对我回答的最大的肯定和动力
split之后得到一个列表,若想用特定符号连接可以用内置函数join,直接用特定符号连接返回字符串,比如说用"*".join(列表)
对于一门语言的掌握程度怎么样,可以有两个角度来衡量:读和写。
不仅要求自己能解决问题,还要看懂别人的解决方案。代码是这样,正则表达式也是这样。
正则这门语言跟其他语言有一点不同,它通常就是一大堆字符,而没有所谓“语句”的概念。
如何能正确地把一大串正则拆分成一块一块的,成为了破解“天书”的关键。
本文就解决这一问题,内容包括:
1. 结构和操作符
2. 注意要点
3. 案例分析
编程语言一般都有操作符。只要有操作符,就会出现一个问题。当一大堆操作在一起时,先操作谁,又后操作谁呢?为了不产生歧义,就需要语言本身定义好操作顺序,即所谓的优先级。
而在正则表达式中,操作符都体现在结构中,即由特殊字符和普通字符所代表的一个个特殊整体。
JS正则表达式中,都有哪些结构呢?
字符字面量、字符组、量词、锚字符、分组、选择分支、反向引用。
具体含义简要回顾如下(如懂,可以略去不看):
字面量,匹配一个具体字符,包括不用转义的和需要转义的。比如a匹配字符"a",又比如\\n匹配换行符,又比如\\.匹配小数点。
字符组,匹配一个字符,可以是多种可能之一,比如[0-9],表示匹配一个数字。也有\\d的简写形式。另外还有反义字符组,表示可以是除了特定字符之外任何一个字符,比如[^0-9],表示一个非数字字符,也有\\D的简写形式。
量词,表示一个字符连续出现,比如a{1,3}表示“a”字符连续出现3次。另外还有常见的简写形式,比如a+表示“a”字符连续出现至少一次。
锚点,匹配一个位置,而不是字符。比如^匹配字符串的开头,又比如\\b匹配单词边界,又比如(?=\\d)表示数字前面的位置。
分组,用括号表示一个整体,比如(ab)+,表示"ab"两个字符连续出现多次,也可以使用非捕获分组(?:ab)+。
分支,多个子表达式多选一,比如abc|bcd,表达式匹配"abc"或者"bcd"字符子串。
反向引用,比如\\2,表示引用第2个分组。
其中涉及到的操作符有:
1.转义符 \\
2.括号和方括号 (...)、(?:...)、(?=...)、(?!...)、[...]
3.量词限定符 {m}、{m,n}、{m,}、?、*、+
4.位置和序列 ^ 、$、 \\元字符、 一般字符
5. 管道符(竖杠) |
上面操作符的优先级从上至下,由高到低。
这里,我们来分析一个正则:
/ab?(c|de*)+|fg/
希望你没被我绕晕,上面的分析可用其可视化形式描述如下:
关于结构和操作符,还是有几点需要强调:
2.1 匹配字符串整体问题
因为是要匹配整个字符串,我们经常会在正则前后中加上锚字符^和$。
比如要匹配目标字符串"abc"或者"bcd"时,如果一不小心,就会写成/^abc|bcd$/。
而位置字符和字符序列优先级要比竖杠高,故其匹配的结构是:
应该修改成:
2.2 量词连缀问题
假设,要匹配这样的字符串:
1. 每个字符为a、b、c任选其一
2. 字符串的长度是3的倍数
此时正则不能想当然地写成/^[abc]{3}+$/,这样会报错,说“+”前面没什么可重复的:
此时要修改成:
2.3 元字符转义问题
所谓元字符,就是正则中有特殊含义的字符。
所有结构里,用到的元字符总结如下:
^ $ . * + ? | \\ / ( ) [ ] { } = ! : - ,
当匹配上面的字符本身时,可以一律转义:
Demand feedback