我需要re.findall
检测后面的单词a "="
所以它适用于一个例子
re.findall('\w+(?=[=])', "I think Python=amazing")
但它不适用于“我认为 Python = Amazing”或“Python =amazing”......我不知道如何正确地整合空格问题。
非常感谢!
我需要re.findall
检测后面的单词a "="
所以它适用于一个例子
re.findall('\w+(?=[=])', "I think Python=amazing")
但它不适用于“我认为 Python = Amazing”或“Python =amazing”......我不知道如何正确地整合空格问题。
非常感谢!
'(\w+)\s*=\s*'
re.findall('(\w+)\s*=\s*', 'I think Python=amazing') \\ return 'Python'
re.findall('(\w+)\s*=\s*', 'I think Python = amazing') \\ return 'Python'
re.findall('(\w+)\s*=\s*', 'I think Python =amazing') \\ return 'Python'
您说“再次陷入正则表达式”可能是参考您之前的问题寻找一种在脚本中识别和替换 Python 变量的方法,您可以在其中得到您所问问题的答案,但我认为您没有问这个问题你真的很想知道答案。
您正在寻求重构 Python 代码,除非您的工具理解Python,否则它将产生误报和误报;也就是说,查找variable =
不是分配的实例和缺少与您的正则表达式不匹配的分配。
在您为 Python 使用哪些重构工具中提供了部分工具列表?使用“重构 Python your_editing_environment”进行更一般的搜索将产生更多结果。
只需在之前添加一些可选的空格=
:
\w+(?=\s*=)
改用这个
re.findall('^(.+)(?=[=])', "I think Python=amazing")
解释
# ^(.+)(?=[=])
#
# Options: case insensitive
#
# Assert position at the beginning of the string «^»
# Match the regular expression below and capture its match into backreference number 1 «(.+)»
# Match any single character that is not a line break character «.+»
# Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
# Assert that the regex below can be matched, starting at this position (positive lookahead) «(?=[=])»
# Match the character “=” «[=]»
您需要在单词和之间允许空格=
:
re.findall('\w+(?=\s*[=])', "I think Python = amazing")
您还可以通过在单词周围使用捕获组来简化表达式,而不是在等号周围使用非捕获组:
re.findall('(\w+)\s*=', "I think Python = amazing")
r'(.*)=.*'
也会这样做...
你有任何东西#1,后面=
跟着任何东西#2,你得到任何东西#1。
>>> re.findall(r'(.*)=.*', "I think Python=amazing")
['I think Python']
>>> re.findall(r'(.*)=.*', " I think Python = amazing oh yes very amazing ")
[' I think Python ']
>>> re.findall(r'(.*)=.*', "= crazy ")
['']
然后您可以strip()
返回列表中的字符串。
re.split(r'\s*=', "I think Python=amazing")[0].split() # returns ['I', 'think', 'Python']