Python 用于去除单词结尾的正则表达式
我有以下标识符:Python 用于去除单词结尾的正则表达式,python,regex,Python,Regex,我有以下标识符: id1 = '883316040119_FRIENDS_HD' id2 = 'ZWEX01DE9463DB_DMD' id3 = '35358fr1' id4 = 'as3d99j_br001' 我需要一个正则表达式来获得以下输出: id1 = '883316040119' id2 = 'ZWEX01DE9463DB' id3 = '35358' id4 = 'as3d99j' 这是我到目前为止得到的-- 但它并不完美,以下是它给我的: BAD - 883316040
id1 = '883316040119_FRIENDS_HD'
id2 = 'ZWEX01DE9463DB_DMD'
id3 = '35358fr1'
id4 = 'as3d99j_br001'
我需要一个正则表达式来获得以下输出:
id1 = '883316040119'
id2 = 'ZWEX01DE9463DB'
id3 = '35358'
id4 = 'as3d99j'
这是我到目前为止得到的--
但它并不完美,以下是它给我的:
BAD - 883316040119_FRIENDS
GOOD - ZWEX01DE9463DB
GOOD - 35358
GOOD - as3d99j
得到所有这些表达式的正确正则表达式是什么?对于第一个,我基本上想去掉只有下划线和字母的结尾,因此1928h9829\u bundle\u hd-->1928h9829
请注意,我这里有数十万个标识符,需要使用正则表达式。我不是在寻找python
split()
方法,因为它不起作用。您只检查了一次下划线,因为?
意味着{0,1}
r'(_[a-zA-Z]{2,}\d?(00[0-9])?|[a-z]{2,}\d)+$'
您只检查了一次下划线,因为
?
表示{0,1}
r'(_[a-zA-Z]{2,}\d?(00[0-9])?|[a-z]{2,}\d)+$'
您只检查了一次下划线,因为
?
表示{0,1}
r'(_[a-zA-Z]{2,}\d?(00[0-9])?|[a-z]{2,}\d)+$'
您只检查了一次下划线,因为
?
表示{0,1}
r'(_[a-zA-Z]{2,}\d?(00[0-9])?|[a-z]{2,}\d)+$'
下面将从您的输入中复制所需的结果 我将使用此正则表达式的替换方法:
_[^']+|(?!.*_)('[0-9]+)[^']+
然后返回第1组
也许:
result = re.sub("_[^']+|(?!.*_)('[0-9]+)[^']+", r"\1", subject)
正则表达式首先查找下划线。如果它找到一个,它将匹配所有内容,但不包括下一个报价;这将被移除
如果不匹配,则替代方法将查找没有下划线的字符串;在捕获组1中匹配并返回数字序列;然后替换数字后面的所有内容,直到但不包括单引号。以下内容将根据您的输入再现所需的结果 我将使用此正则表达式的替换方法:
_[^']+|(?!.*_)('[0-9]+)[^']+
然后返回第1组
也许:
result = re.sub("_[^']+|(?!.*_)('[0-9]+)[^']+", r"\1", subject)
正则表达式首先查找下划线。如果它找到一个,它将匹配所有内容,但不包括下一个报价;这将被移除
如果不匹配,则替代方法将查找没有下划线的字符串;在捕获组1中匹配并返回数字序列;然后替换数字后面的所有内容,直到但不包括单引号。以下内容将根据您的输入再现所需的结果 我将使用此正则表达式的替换方法:
_[^']+|(?!.*_)('[0-9]+)[^']+
然后返回第1组
也许:
result = re.sub("_[^']+|(?!.*_)('[0-9]+)[^']+", r"\1", subject)
正则表达式首先查找下划线。如果它找到一个,它将匹配所有内容,但不包括下一个报价;这将被移除
如果不匹配,则替代方法将查找没有下划线的字符串;在捕获组1中匹配并返回数字序列;然后替换数字后面的所有内容,直到但不包括单引号。以下内容将根据您的输入再现所需的结果 我将使用此正则表达式的替换方法:
_[^']+|(?!.*_)('[0-9]+)[^']+
然后返回第1组
也许:
result = re.sub("_[^']+|(?!.*_)('[0-9]+)[^']+", r"\1", subject)
正则表达式首先查找下划线。如果它找到一个,它将匹配所有内容,但不包括下一个报价;这将被移除
如果不匹配,则替代方法将查找没有下划线的字符串;在捕获组1中匹配并返回数字序列;然后替换数字后面的所有内容,直到但不包括单引号。这适用于以下示例:
for id in ids :
print (id)
883316040119_FRIENDS_HD
ZWEX01DE9463DB_DMD
35358fr1
as3d99j_br001
for id in ids :
hit = re.sub( "(_[A-Za-z_]*|_?[A-Za-z]{2,4}?\d?(00\d)?)$", "", id)
print (hit)
883316040119
ZWEX01DE9463DB
35358
as3d99j
当尾部包含字母和下划线时,图案很容易,可以去掉任意数量的下划线和数字;如果尾部不包含下划线,或下划线后包含数字,则需要问题中的模式:0/2/3/4个字母,然后是可选数字,然后是可选零位。这适用于以下示例:
for id in ids :
print (id)
883316040119_FRIENDS_HD
ZWEX01DE9463DB_DMD
35358fr1
as3d99j_br001
for id in ids :
hit = re.sub( "(_[A-Za-z_]*|_?[A-Za-z]{2,4}?\d?(00\d)?)$", "", id)
print (hit)
883316040119
ZWEX01DE9463DB
35358
as3d99j
当尾部包含字母和下划线时,图案很容易,可以去掉任意数量的下划线和数字;如果尾部不包含下划线,或下划线后包含数字,则需要问题中的模式:0/2/3/4个字母,然后是可选数字,然后是可选零位。这适用于以下示例:
for id in ids :
print (id)
883316040119_FRIENDS_HD
ZWEX01DE9463DB_DMD
35358fr1
as3d99j_br001
for id in ids :
hit = re.sub( "(_[A-Za-z_]*|_?[A-Za-z]{2,4}?\d?(00\d)?)$", "", id)
print (hit)
883316040119
ZWEX01DE9463DB
35358
as3d99j
当尾部包含字母和下划线时,图案很容易,可以去掉任意数量的下划线和数字;如果尾部不包含下划线,或下划线后包含数字,则需要问题中的模式:0/2/3/4个字母,然后是可选数字,然后是可选零位。这适用于以下示例:
for id in ids :
print (id)
883316040119_FRIENDS_HD
ZWEX01DE9463DB_DMD
35358fr1
as3d99j_br001
for id in ids :
hit = re.sub( "(_[A-Za-z_]*|_?[A-Za-z]{2,4}?\d?(00\d)?)$", "", id)
print (hit)
883316040119
ZWEX01DE9463DB
35358
as3d99j
当尾部包含字母和下划线时,图案很容易,可以去掉任意数量的下划线和数字;如果尾部不包含下划线,或在下划线后包含数字,则需要问题中的模式:0/2/3/4个字母,然后是可选数字,然后是可选零位。对于表示输入的方式,我建议使用以下简单的正则表达式:
^(?:[^_]+(?=_)|\d+)
如果要向规范中添加详细信息,可以对此进行调整
为了向您展示regex演示,仅仅因为站点regex101的工作方式,我们必须添加\n
(假设我们正在处理整个文件,而不是一次一个输入):
解释
锚定声明我们位于字符串的开头^
- 非捕获组
匹配(?:…)
非下划线字符(后跟下划线,不匹配)[^]+(?=41;
或|
数字\d+
^(?:[^_]+(?=_)|\d+)
如果要向规范中添加详细信息,可以对此进行调整
为了向您展示regex演示,仅仅因为站点regex101的工作方式,我们必须添加\n
(它假设我们正在处理整个文件,而不是一个文件)