如何使用Python Regex查找符号后跟所有单词?

时间:2012-06-09 12:39:11

标签: python regex whitespace

我需要re.findall来检测a "="

后面的单词

所以它适用于像

这样的例子
re.findall('\w+(?=[=])', "I think Python=amazing")

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

非常感谢!

7 个答案:

答案 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']