我的正则表达式搜索有点困难,我不知道为什么。我有一个文件,其值的格式如下:
1 -1 2 SER HA H 4.477 0.003 1
2 -1 2 SER HB2 H 3.765 0.001 1
3 -1 2 SER HB3 H 3.765 0.001 1
4 -1 2 SER C C 173.726 0.2 1
5 -1 2 SER CA C 58.16 0.047 1
6 -1 2 SER CB C 64.056 0.046 1
7 0 3 HIS H H 8.357 0.004 1
8 0 3 HIS HA H 4.725 0.003 1
9 0 3 HIS HB2 H 3.203 0.003 2
.....
63 7 10 GLU HA H 4.328 0.004 1
64 7 10 GLU HB2 H 2.154 0.005 2
65 7 10 GLU HB3 H 2.156 0.004 2
66 7 10 GLU HG2 H 2.262 0.014 2
67 7 10 GLU HG3 H 2.464 0.001 2
68 7 10 GLU C C 177.242 0.2 1
69 7 10 GLU CA C 59.009 0.068 1
...
我想逐行搜索上面的字符串
import re
with open('delete.txt') as file:
for lines in file:
modifier=lines.strip()
A=re.search('\B\d+\s[A-Z][A-Z][A-Z]\s[A-Z]',modifier)
if A != None:
search=A.string
print(search)
上述文件的格式变化很大,但始终保持一致的是会有一个数字,后面跟着3个字母,后面跟着另一个字母。即2 SER HA
所以我决定用它作为我的正则表达式搜索,但这不太管用。在63 7 10 GLU
行之后,它工作得很好,但是它找不到之前的任何其他条目,尽管事实上每一行都是相同的格式
上面的示例是一个MVE
任何帮助都将不胜感激
我相信您不需要在非单词边界位置开始搜索。不过,您可以添加
\b
。此外,如果存在匹配项,则可以打印lines
变量,而不从匹配数据对象获取它使用
见regex demo
如果需要获取字段值,请将最后一个
[A-Z]
替换为[A-Z0-9]+
,请参见this regex demo正则表达式详细信息
\b
-字边界\d+
-1+位\s+
-1+空格[A-Z]{3}
-三个大写ASCII字母\s+
-1+空格[A-Z]
-一个大写ASCII字母李>注意使用了原始字符串文字
r'...'
,这样我们就不必使用表示正则表达式转义的双转义反斜杠相关问题 更多 >
编程相关推荐