如何基于正则表达式删除带有异常的行
How to remove a line based on a regular expression with exceptions
我需要删除具有以下特征的行。
<img src="index-1_2.jpg"/><br>
<img src="index-1_3.jpg"/><br>
<img src="index-1_5.jpg"/><br>
<img src="index-2_1.jpg"/><br>
<img src="index-2_5.jpg"/><br>
<img src="index-3_1.png"/><br>
<img src="index-23_8.png"/><br>
<img src="index-22_9.png"/><br>
<img src="index-22_1.jpg"/><br>
<img src="index-22_2.jpg"/><br>
<img src="index-99_5.png"/><br>
<img src="index-100_5.png"/><br>
<img src="index-1000_5.png"/><br>
...
如您所见,在单词 index 和 _ 之后找到的数字,图像格式(png、jpg)也各不相同。
我需要生成一个正则表达式来删除在 index 之后找到的所有这些行 EXECPTING 数字。例如,我需要保留只有数字 1 和 2 的行。
我有以下生成的正则表达式
^<img src="index-(?!2|1)\d+_\d+\.(?:jpg|png)"\/><br>$
但是想要保留数字 1 和 2,它还会保留数字 22、23、100 和 1000,因为它们包含这些数字
使用
^<img src="index-(?![12]_)(\d+)_\d+\.(?:jpg|png)"\/><br>$
参见regex proof。使用 </code> 作为替换。</p>
<p><strong>解释</strong></p>
<pre><code>--------------------------------------------------------------------------------
^ the beginning of the string
--------------------------------------------------------------------------------
<img src="index- '<img src="index-'
--------------------------------------------------------------------------------
(?! look ahead to see if there is not:
--------------------------------------------------------------------------------
[12] any character of: '1', '2'
--------------------------------------------------------------------------------
_ '_'
--------------------------------------------------------------------------------
) end of look-ahead
--------------------------------------------------------------------------------
( group and capture to :
--------------------------------------------------------------------------------
\d+ digits (0-9) (1 or more times (matching
the most amount possible))
--------------------------------------------------------------------------------
) end of
--------------------------------------------------------------------------------
_ '_'
--------------------------------------------------------------------------------
\d+ digits (0-9) (1 or more times (matching
the most amount possible))
--------------------------------------------------------------------------------
\. '.'
--------------------------------------------------------------------------------
(?: group, but do not capture:
--------------------------------------------------------------------------------
jpg 'jpg'
--------------------------------------------------------------------------------
| OR
--------------------------------------------------------------------------------
png 'png'
--------------------------------------------------------------------------------
) end of grouping
--------------------------------------------------------------------------------
" '"'
--------------------------------------------------------------------------------
\/ '/'
--------------------------------------------------------------------------------
><br> '><br>'
--------------------------------------------------------------------------------
$ before an optional \n, and the end of the
string
您可以使用
而不是使用负前瞻(?!2|1)
(?![12]_)
如果下一个字符是 1 或 2 后跟下划线,它会阻止匹配。
通过摆弄 here,我想我得到了你要找的东西:
import re
txt = "index-4_8.jpg"
txt2 = "index-1_8.png"
#Check if the string starts with "The":
x = re.search("^(index-2_|index-1_).+(.jpg|.png)$", txt)
if (x):
print('Matched')
else:
print('NotMatched')
x = re.search("^(index-2_|index-1_).+(.jpg|.png)$", txt2)
if (x):
print('Matched')
else:
print('NotMatched')
我需要删除具有以下特征的行。
<img src="index-1_2.jpg"/><br>
<img src="index-1_3.jpg"/><br>
<img src="index-1_5.jpg"/><br>
<img src="index-2_1.jpg"/><br>
<img src="index-2_5.jpg"/><br>
<img src="index-3_1.png"/><br>
<img src="index-23_8.png"/><br>
<img src="index-22_9.png"/><br>
<img src="index-22_1.jpg"/><br>
<img src="index-22_2.jpg"/><br>
<img src="index-99_5.png"/><br>
<img src="index-100_5.png"/><br>
<img src="index-1000_5.png"/><br>
...
如您所见,在单词 index 和 _ 之后找到的数字,图像格式(png、jpg)也各不相同。
我需要生成一个正则表达式来删除在 index 之后找到的所有这些行 EXECPTING 数字。例如,我需要保留只有数字 1 和 2 的行。
我有以下生成的正则表达式
^<img src="index-(?!2|1)\d+_\d+\.(?:jpg|png)"\/><br>$
但是想要保留数字 1 和 2,它还会保留数字 22、23、100 和 1000,因为它们包含这些数字
使用
^<img src="index-(?![12]_)(\d+)_\d+\.(?:jpg|png)"\/><br>$
参见regex proof。使用 </code> 作为替换。</p>
<p><strong>解释</strong></p>
<pre><code>--------------------------------------------------------------------------------
^ the beginning of the string
--------------------------------------------------------------------------------
<img src="index- '<img src="index-'
--------------------------------------------------------------------------------
(?! look ahead to see if there is not:
--------------------------------------------------------------------------------
[12] any character of: '1', '2'
--------------------------------------------------------------------------------
_ '_'
--------------------------------------------------------------------------------
) end of look-ahead
--------------------------------------------------------------------------------
( group and capture to :
--------------------------------------------------------------------------------
\d+ digits (0-9) (1 or more times (matching
the most amount possible))
--------------------------------------------------------------------------------
) end of
--------------------------------------------------------------------------------
_ '_'
--------------------------------------------------------------------------------
\d+ digits (0-9) (1 or more times (matching
the most amount possible))
--------------------------------------------------------------------------------
\. '.'
--------------------------------------------------------------------------------
(?: group, but do not capture:
--------------------------------------------------------------------------------
jpg 'jpg'
--------------------------------------------------------------------------------
| OR
--------------------------------------------------------------------------------
png 'png'
--------------------------------------------------------------------------------
) end of grouping
--------------------------------------------------------------------------------
" '"'
--------------------------------------------------------------------------------
\/ '/'
--------------------------------------------------------------------------------
><br> '><br>'
--------------------------------------------------------------------------------
$ before an optional \n, and the end of the
string
您可以使用
而不是使用负前瞻(?!2|1)
(?![12]_)
如果下一个字符是 1 或 2 后跟下划线,它会阻止匹配。
通过摆弄 here,我想我得到了你要找的东西:
import re
txt = "index-4_8.jpg"
txt2 = "index-1_8.png"
#Check if the string starts with "The":
x = re.search("^(index-2_|index-1_).+(.jpg|.png)$", txt)
if (x):
print('Matched')
else:
print('NotMatched')
x = re.search("^(index-2_|index-1_).+(.jpg|.png)$", txt2)
if (x):
print('Matched')
else:
print('NotMatched')