首页 > 解决方案 > 如何查找python中是否有下一个字符?

问题描述

我正在学习和尝试字符串上的正则表达式。

这是"DBZ:00000*{6000}/ONE/REFFERRARO REF:FINE DOGS*"

我试图找到REF这个字符串中的所有内容。所以我用了这个:

import re

doom = 'REF'
boom = "DBZ:00000*{6000}/ONE/REFFERRARO REF:FINE DOGS*"

# print(i)
# print('Found "%s" in "%s" ->' % (i, boom), end='')
print(re.findall(r"\b" + doom + "*", boom))
if re.search(doom, boom):
    print("found")

输出:

['REFF','REF']

我在这里没有得到准确的 REF,而且我想要做的是检查“REF”旁边是否有任何字符

像:"REFFERRARO" -> Here next to "REF" is "F" "REF:FINE" -> Here next to "REF" is ":"

所以如果我发现"REF"除了":"我想在":"之后添加的任何东西"REF"

例子:

String: "DBZ:00000*{6000}/ONE/REFFERRARO REF:FINE DOGS*"
Output: "DBZ:00000*{6000}/ONE/REF:FERRARO REF:FINE DOGS*"

更新:

如前所述,我使用了 .sub 并得到了这个:

print(re.compile('REF').sub("REF:", boom))

输出:

"DBZ:00000*{6000}/ONE/REF:FERRARO REF::FINE DOGS*"

新更新

试过这个并且它有效(但我不认为这是有效的,因为如果有n个“REFFERRARO”那么):

print(re.compile('REF').sub("REF:", boom,count=1))

标签: regexpython-3.x

解决方案


您的模式'\bREF*'寻找一个单词边界,然后是'REF'where'F'有资格出现 0 到 n 次。这就是你得到的:'REF''REFF'

你大概想要r'\bREF.*\b'

代替你:做的事:

import re


pattern = r'\bREF([^:])' # REF followed by NOT a : - capture the single char

# \1 inserts the single char after REF without : again
correct = re.sub(pattern, r'REF:\1', "DBZ:00000*{6000}/ONE/REFFERRARO REF:FINE DOGS*")

print(correct)  

输出:

DBZ:00000*{6000}/ONE/REF:FERRARO REF:FINE DOGS*

推荐阅读