将正则表达式用于两个定界符以提取字符串

时间:2018-11-04 00:25:29

标签: python regex

问题How to delete the words between two delimiters?对我真的很有帮助。

所以我有一个像这样的字符串:

string = $blabla$blav:1085$350_X[7:0]

我正在尝试删除'[]'内部的所有内容,以使整个内容成为$blabla$blav:1085$350_X

我尝试了所有这些:

re.sub('[[^]]+]', '', string)
re.sub(r'[.+?]', '', string)
re.sub('[.*?]', '', string)

请使用正则表达式进行任何涉及一步的方法。

此外,我需要捕获该字符串[7:0],以备后用。

3 个答案:

答案 0 :(得分:1)

尝试使用正则表达式dot。它与digits匹配,其中\[([0-9]+\:[0-9]+)\]$[X:Y]是数字,整个内容都在字符串的末尾。正则表达式中只有一组返回两个数字X,而没有YX:Y

使用它替换字符串:

[

您可以使用此]来匹配两组中的两个数字。

import re
re.sub('\[([0-9]+\:[0-9]+)\]$', '', string)

重要的是,如果数字是两个或多个数字,则使用正则表达式而不是仅使用字符串索引。否则,可以建立索引。

如果\[([0-9]+)\:([0-9]+)\]$不在字符串末尾,只需从正则表达式中删除numbersRegex = re.search('\[([0-9]+)\:([0-9]+)\]$', string) number1 = numbersRegex.group(1) number2 = numbersRegex.group(2) bothNumbers = numbersRegex.group(0)

您可以使用this website并将正则表达式粘贴到此处。它提供说明和文本字段以进行测试。

答案 1 :(得分:0)

您可以将rsplitmaxsplit=1一起使用,以确保它仅在最后一个[上分割,

string = "$blabla$blav:1085$350_X[7:0]"
s_string = string.rsplit('[', maxsplit=1)

left = s_string[0]
right = "[" + s_string[-1]
print(left)
print(right)


# output

$blabla$blav:1085$350_X
[7:0]

如果必须使用正则表达式,请尝试正向查找以匹配上一次出现的[

import re

string = "$blabla$blav:1085$350_X[7:0]"
regex = r'(^.*(?=\[))(.*)'
ss = re.match(regex, string)

left = ss.group(1)
right = ss.group(2)


print(left)
print(right)


# output

$blabla$blav:1085$350_X
[7:0]

答案 2 :(得分:0)

string= '$blabla$blav:1085$350_X[7:0]'

cut_string = string.split('[')[0] # = '$blabla$blav:1085$350_X'

bracket_data = string.split('[')[1].replace(']', '') # = '7:0'

肮脏,但只是奇怪。