2024-04-28 08:39:07 发布
网友
我有一个字符串Node57Name123.grpObject12.grp23Symbol43.shape52.anotherobject25.shape23。
Node57Name123.grpObject12.grp23Symbol43.shape52.anotherobject25.shape23
"Node57Name123"
尝试了re.sub(r"\d+","",string),但每隔一个数字就删除一个
re.sub(r"\d+","",string)
输出应该如下所示"Node57Name123.grpObject.grp23Symbol.shape.anotherobject.shape"
"Node57Name123.grpObject.grp23Symbol.shape.anotherobject.shape"
你能给我指一下正确的方向吗
只是为了给你一个非正则表达式的选择,使用^{}。我们可以为这个函数提供一组字符,以便从字符串的右侧删除,例如:rstrip('0123456789')。或者,我们也可以使用^{}模块中的数字常量:
rstrip('0123456789')
from string import digits s = 'Node57Name123.grpObject12.grp23Symbol43.shape52.anotherobject25.shape23' x = '.'.join([s.split('.')[0]] + [i.rstrip(digits) for i in s.split('.')[1:]]) print(x)
印刷品:
Node57Name123.grpObject.grp23Symbol.shape.anotherobject.shape
编辑:
如果您必须使用常规模式,则以下内容似乎涵盖了您的示例:
(\.[^.]*?)\d+\b
替换为第一个捕获组,请参阅联机demo
(
\.[^.]*?
)
\d+\b
样本:
import re s = 'Node57Name123.grpObject12.grp23Symbol43.shape52.anotherobject25.shape23' x = re.sub(r'(\.[^.]*?)\d+\b', r'\1', s) print(x)
你可以用
re.sub(r'^([^.]*\.)|\d+(?![^.])', r'\1', text)
见regex demo
详细信息:
^([^.]*\.)
.
\1
|
\d+(?![^.])
(?=\.|$)
见Python demo:
import re text = r'Node57Name123.grpObject12.grp23Symbol43.shape52.anotherobject25.shape23' print( re.sub(r'^([^.]*\.)|\d+(?![^.])', r'\1', text) ) ## => Node57Name123.grpObject.grp23Symbol.shape.anotherobject.shape
只是为了给你一个非正则表达式的选择,使用^{} 。我们可以为这个函数提供一组字符,以便从字符串的右侧删除,例如:} 模块中的数字常量:
rstrip('0123456789')
。或者,我们也可以使用^{印刷品:
编辑:
如果您必须使用常规模式,则以下内容似乎涵盖了您的示例:
替换为第一个捕获组,请参阅联机demo
(
-打开捕获组:\.[^.]*?
-一个文字点,后跟0+非点字符(惰性)李>)
-关闭捕获组李>\d+\b
-匹配1+个数字,直到一个单词边界李>样本:
印刷品:
你可以用
见regex demo
详细信息:
^([^.]*\.)
-零个或多个字符,而不是一个点,然后在捕获到组1中的字符串的开头是一个.
字符(在替换模式中用\1
引用)|
-或\d+(?![^.])
-一个或多个数字后跟一个点或字符串结尾((?=\.|$)
)李>见Python demo:
相关问题 更多 >
编程相关推荐