python的正则表达式怎么删去多余 重复的问号呀? rt求解!
import re
str = "Hello??world???How?are????you?"
result = re.sub(r'\?+', '?', str)
print(result)
什么叫多余的问号?用例摆出来啊
要删除多余重复的问号,可以使用正则表达式中的"?"符号进行匹配,具体操作如下:
使用re.sub()函数进行替换操作
构造正则表达式,匹配多余的重复问号
将多余的重复问号替换成一个问号
具体代码如下:
import re
text = "How??are???you????doing?"
pattern = r'\?+'
replaced_text = re.sub(pattern, '?', text)
print(replaced_text)
首先导入re模块,然后定义一个字符串变量text,该字符串中包含多个重复的问号。然后定义一个正则表达式pattern,该正则表达式使用了“+”符号表示匹配一个或多个前面的字符。这里匹配的是一个或多个问号。最后使用re.sub()函数进行替换操作,将匹配到的多个重复问号替换成一个问号。最后输出替换后的字符串。
思路就是当?连续重复出现时,替换为一个问号,参考代码:
>>> import re
>>> s = 'This is a nice day?? Do you think so????'
>>> re.sub(r'(\?+)', '?', s)
'This is a nice day? Do you think so?'
有帮助的话,请点采纳该答案~
操作符 | 说明 | 实例 |
---|---|---|
. | 表示任何单个字符 | |
[ ] | 字符集,对单个字符给出取值范围 | [abc]表示a、b、c,[a-z]表示a到z的单个字符,[WK],表示W、K |
[^ ] | 非字符集,对单个字符给出排除范围 | [^abc]表示非a或b或c的单个字符 |
* | 前一个字符0次或者无限次扩展 | abc*,表示ab、abc、abcc、abcc等 |
+ | 前一个字符1次或者无限次扩展 | abc+,表示abc、abcc、abccc等 |
? | 前一个字符0次或1次扩展 | abc?表示ab、abc |
| | 左右表达式任意一个 | abc|def表示abc、def |
{m} | 扩展前一个字符m次 | ab{2}c表示abbc |
{m,n} | 扩展前一个字符m至n次(包括n) | ab{1,2}c表示abc、abbc |
^ | 匹配字符串开头 | ^abc表示abc且在一个字符串的开头 |
$ | 匹配字符串结尾 | abc$表示abc且在一个字符串的结尾 |
( ) | 分组标记,内部只能使用|操作符 | (abc)表示abc,(abc|def)表示abc、def |
\d | 数字,等价于[0-9] | |
\w | 单词字符,等价于[A-Za-z0-9_] |
举例:
正则表达式 | 对应字符串 |
---|---|
P(Y|YT|YTH|YTHO)?N | PN,PYN,PYTN,PYTHN,PYTHON |
PYTHON+ | PYTHON,PYTHONN,PYTHONNN… |
PY[TH]ON | PYTON,PYHON |
PY[^TH]?ON | PYON,PYAaN,PYbON,PYcON…(没有T/H) |
PY{0:3}N | PN,PYN,PYYN,PYYYN【表示0到3次】 |
^[A-Za-z]+$ | 由26个字母组成的字符串 |
---|---|
^[A-Za-z0-9]+$ | 由26个字母和数字组成的字符串 |
^-?\d+$ | 整数形式的字符串(可能有负数) |
^[0-9]*[1-9][0-9]*$ | 正整数形式的字符串**(如果[]中的元素没有约定次数,默认可以重复无限多次)** |
[1-9]\d{5} | 中国境内的邮政编码 |
[\u4e00-\u9fa5] | 匹配中文字符(采用utf-8约定了中文字符的取值范围) |
\d{3}-\d{8}|\d{4}-\d{7} | 国内的电话号码,010-68913536或者010-6891-3536 |
IP地址由4断组成,每段0-255,由’.'分割,如210.134.3.123
第一步:\d+.\d+.\d+.\d+
,不考虑长度
第二步:\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}
考虑了长度
第三步:分割
0-99:[1-9]?\d
100-199:1\d{2}
200-249:2[0-4]\d
250-255:25[0-5]
组合:(([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5]).){3}([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])