3

我需要re.findall检测后面的单词a "="

所以它适用于一个例子

re.findall('\w+(?=[=])', "I think Python=amazing")

但它不适用于“我认为 Python = Amazing”或“Python =amazing”......我不知道如何正确地整合空格问题。

非常感谢!

4

7 回答 7

4
'(\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'
于 2012-06-09T12:42:42.480 回答
3

您说“再次陷入正则表达式”可能是参考您之前的问题寻找一种在脚本中识别和替换 Python 变量的方法,您可以在其中得到您所问问题的答案,但我认为您没有问这个问题你真的很想知道答案。

您正在寻求重构 Python 代码,除非您的工具理解Python,否则它将产生误报和误报;也就是说,查找variable =不是分配的实例和缺少与您的正则表达式不匹配的分配。

在您为 Python 使用哪些重构工具中提供了部分工具列表?使用“重构 Python your_editing_environment”进行更一般的搜索将产生更多结果。

于 2012-06-09T13:12:35.760 回答
1

只需在之前添加一些可选的空格=

\w+(?=\s*=)
于 2012-06-09T12:44:44.087 回答
0

改用这个

 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 “=” «[=]»
于 2012-06-09T12:42:14.850 回答
0

您需要在单词和之间允许空格=

re.findall('\w+(?=\s*[=])', "I think Python = amazing")

您还可以通过在单词周围使用捕获组来简化表达式,而不是在等号周围使用非捕获组:

re.findall('(\w+)\s*=', "I think Python = amazing")
于 2012-06-09T12:44:23.340 回答
0

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()返回列表中的字符串。

于 2012-06-09T12:50:49.327 回答
-1
re.split(r'\s*=', "I think Python=amazing")[0].split() # returns ['I', 'think', 'Python']
于 2012-06-09T15:11:22.837 回答