Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用于去除单词结尾的正则表达式_Python_Regex - Fatal编程技术网

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
(它假设我们正在处理整个文件,而不是一个文件)