Python 如何检查字符串是否位于行的开头,而不考虑制表符或空格?

Python 如何检查字符串是否位于行的开头,而不考虑制表符或空格?,python,string,python-2.7,Python,String,Python 2.7,如何在不考虑制表符和/或空格的情况下将单词放在行首 #!/usr/bin/python import subprocess as sp args = ["awk", r'/^word/ { print $1}','anyfile.py' ] p = sp.Popen(args, stdin = sp.PIPE, stdout = sp.PIPE, stderr = sp.PIPE ) 您可以简单地使用正则表达式,如下所示 print p.stdout.read() 这里, ^表示字符串的开

如何在不考虑制表符和/或空格的情况下将单词放在行首

#!/usr/bin/python
import subprocess as sp
args = ["awk", r'/^word/ { print $1}','anyfile.py' ]
p = sp.Popen(args, stdin = sp.PIPE, stdout = sp.PIPE, stderr = sp.PIPE )

您可以简单地使用正则表达式,如下所示

print p.stdout.read()
这里,

  • ^
    表示字符串的开头

  • \s*
    表示零个或多个空白字符

  • word
    是您要查找的实际单词


在使用
条带后使用
启动时如何-

import re
re.match(r'^\s*word', line)

仅使用内置字符串方法,即可轻松实现:

str(p.stdout.read()).split()[0]


这将授予您字符串中的第一个单词。

您可以调整awk使用的搜索模式,以接受输入文件中的前导空白字符:

>>>'\n  \t  \r  asasasas ash'.strip().startswith('asa')
>>>True
但在本例中,我不明白为什么不直接在Python中执行解析:

import subprocess as sp
args = ["awk", r'/^\s*word/ { print $1}','anyfile.py' ]
p = sp.Popen(args, stdin = sp.PIPE, stdout = sp.PIPE, stderr = sp.PIPE )
print p.stdout.read()
供参考:


听起来您真正想做的是使用模块解析python文件的抽象synatax树。有比使用正则表达式更好的方法。下面是一个例子:

with open("anyfile.py") as f:
    for line in f:
        if line.lstrip().startswith("word"):
            print "found match!"

您还可以将该正则表达式集成到awk搜索模式:
awk'/^\s*return/{print$1}test.py
。但在这种情况下,我不明白为什么不直接用Python打开并过滤文件……我需要在文件中找到所有函数名(args=[“awk”,r'/^\s*def/{print$2}','/home/tiko/workspace/Testing_Python/qt_image_editor.py']),我取了“def”后面的第二个词这就是为什么我需要使用awk@Tigran84即使这样,使用awk也不比使用Python容易。@Tigran84还可以看一看,因为我认为这是您试图实现的目标。(可能是简化的形式?)现在我刚学会pyqt4,我的小程序需要这个选项,谢谢你的建议
import ast

class FunctionVisitor(ast.NodeVisitor):

    def __init__(self):
        self.second_arg_names = []

    def visit_FunctionDef(self, func):
        """collect function names and the second argument of functions that 
        have two or more arguments"""
        args = func.args.args
        if len(args) > 1:
            self.second_arg_names.append((func.name, args[1].id))
        self.generic_visit(func)

def find_func_args(filename=__file__):
    """defaults to looking at this file"""
    with open(filename) as f:
        source = f.read()
    tree = ast.parse(source)

    visitor = FunctionVisitor()
    visitor.visit(tree)

    print visitor.second_arg_names
    assert visitor.second_arg_names == [("visit_FunctionDef", "func")]

if __name__ == "__main__":
    find_func_args()