Python Regex - Match and Start()



假设我需要在字符串中找到单词"water"。这个单词不能是另一个单词的一部分,也不能在前面加上标点符号(所以我假设它前面只能有一个" "或它是字符串的开头)。我需要返回单词的第一个字符"w"的索引。所以我正在尝试这段代码:

import re
s = re.search(r"(A| )bwaterb", "Need water") 
return s.start() # This returns the index of the char " " :(

是否可以忽略模式的 (\A| ) 部分,以便 s.start() 始终返回字符"w"的索引?还是我想错了?

您可以使用

(?<!S)bwaterb

查看正则表达式演示

解释:

  • (?<!S) - 如果整个单词之前有一个非空格字符,则否定的回溯失败water
  • bwaterb - 一个完整的单词water.

这是一个 Python 演示:

import re
s = re.search(r"(?<!S)bwaterb", "Need water") 
if s:
    print(s.start())

你不需要有"字符串或空格的开头"检查。您已经应用了字词边界检查:

>>> s = re.search(r"bwaterb", "Need water")
>>> s.start()
5
>>> s = re.search(r"bwaterb", "water is needed")
>>> s.start()
0

你甚至不需要正则表达式。只需匹配空格和单词,即可获得空格所在的字符,但您想要第一个字母,因此添加 1

bigString = "I drink water"
if " " not in bigString:
    print(bigString.find("water"))
else:
    print(bigString.find(" water")+1)

最新更新