我需要re.findall
来检测a "="
所以它适用于像
这样的例子re.findall('\w+(?=[=])', "I think Python=amazing")
但它不适用于“我认为Python =惊人”或“Python =惊人”...... 我不知道如何正确地整合空白问题。
非常感谢!
答案 0 :(得分:3)
你说“再次陷入正则表达式”可能是参考你之前的问题Looking for a way to identify and replace Python variables in a script,你在那里得到了你问的问题的答案,但我不认为你问的问题你真的想要答案到。
您正在寻找重构Python代码,除非您的工具理解 Python,否则会产生误报和漏报;也就是说,查找variable =
的实例,这些实例不是您的正则表达式不匹配的作业和丢失的作业。
What refactoring tools do you use for Python?有一个部分工具列表,使用“重构Python your_editing_environment”进行更多常规搜索会产生更多效果。
答案 1 :(得分:2)
'(\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'
答案 2 :(得分:1)
只需在=
:
\w+(?=\s*=)
答案 3 :(得分: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 “=” «[=]»
答案 4 :(得分:0)
您需要在单词和=
之间留出空格:
re.findall('\w+(?=\s*[=])', "I think Python = amazing")
您还可以使用围绕单词的捕获组来简化表达式,而不是使用等于的非捕获组:
re.findall('(\w+)\s*=', "I think Python = amazing")
答案 5 :(得分: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()
返回列表中的字符串。
答案 6 :(得分:-1)
re.split(r'\s*=', "I think Python=amazing")[0].split() # returns ['I', 'think', 'Python']