regex - 如何查找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))
解决方案
您的模式'\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*
推荐阅读
- c# - 在 MongoDB 中插入时处理网络问题
- php - 将 PHP 多维数组的特定键和值复制到另一个数组中
- c++ - 运行时链接到不在 LD_LIBRARY_PATH 上的动态库
- bash - 非常慢的 bash 循环
- java - setproperty selenium for selenium
- java - 从java代码生成线程转储
- java - cplex java的if else语句
- python - 由于连接错误,Spark 保存到 elasticsearch 失败
- c# - SaveChangesAsync() 方法不更新数据库
- python-3.x - 我可以用函数的返回值解析 if 语句,然后引用该值而不再次调用它吗?