簡體   English   中英

如果一個單詞在Python中以非字母數字字符開頭,我如何匹配?

[英]How do I match a word if it starts with a nonalphanumeric character in Python?

假設我有一個文本文件,其中每行包含“1”或“-1”。 如何搜索文件以檢查文件是否包含至少一個“1”?

最初,我有以下內容。

if re.search(r'\b1', f.read()): return true
else: return false

但是,這不起作用,因為' - '不被視為字母數字字符串,如果文件不包含單個'1'則返回true。 確定文件是否包含“1”的最佳方法是什么?

使用re.MULTILINE標志, ^將匹配行的開始(而不僅僅是主題的開始):

re.search(re.compile('^1', re.MULTILINE), f.read())

如果任何行以1開頭,則匹配。

請參閱http://docs.python.org/library/re.html#regular-expression-syntax


此替代解決方案避免完全讀取文件:

has_1 = any(line == "1" for line in f)

any('1' in line for line in file)是一種不將整個文件讀入內存的方法。

一種錯綜復雜但可能有效的方式

fmap = mmap.mmap(open('file').fileno(), 0)
'1' in fmap

您還可以對mmap的文件運行re。

re.search('^1', fmap, re.M)


f = open("textfile.txt", "rb")
lines = f.readlines()
new_lines = [line.replace("-1", "") for line in lines]
for line in new_lines:
    if "1" in line:
        print "Damn right!"
        break

def thingy(contents):
    return any(line.strip() == "1" for line in contents.splitlines())

thingy("1\n-1\n-1") # True
thingy("-1\n-1\n-1") # False

或者:

def thingy(contents):
    for line in contents.splitlines():
        if line.strip() == "1":
            return True

    return False


只需列表理解:

>>> if not None in [ re.search( r"1", line ) for line in f.readlines() ] :
        pass # <your code here>

如果“1”或“-1”始終出現在行的開頭,那么您可以將正則表達式更改為:

 ^1

如果它們總是出現在行的中間/末尾,那么使用:

[^-]1

如果它們有時在開始時出現,有時在中間/結束時出現,那么您可以嘗試以下方法:

^1|[^-]1

我沒有測試過這些。 最后一個,特別是,我不確定優先權是否正確。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM