簡體   English   中英

正則表達式在Python中的單詞之前匹配換行符

[英]Regex matching newline before word in python

我有一個模式:“ \\ nvariable WORD”

該模式在字符串中顯示了很多次,我想要該模式顯示的索引列表。 “ WORD”是固定的,並且在實例之間沒有變化,但是“ variable”的內容和長度有所不同。

在python中,我知道這匹配所有WORD並在列表中返回其索引:

contents="some long string"
print [m.start() for m in re.finditer('WORD',contents)]

簡而言之, 如何找到\\ n之后但“ WORD”之前所有“變量”的索引?

這足夠嗎?

>>> import re
>>> s = '\nvariable1 WORD\nvariable2 WORD\nvariable3 WORD\nvariable4 WORD\nvariable5 WORD'
>>> re.findall(r'\n(\w+)\s+WORD', s)
['variable1', 'variable2', 'variable3', 'variable4', 'variable5']

您需要什么索引?

如果您知道的唯一工具是錘子,那么每個問題都像釘子。

正則表達式是強大的工具,但有時並不是執行任務的最佳工具。 實際上,正則表達式被濫用很多,每當有人要求我從其他程序員那里檢查復雜的正則表達式時,我都會感到不寒而栗(通常幾周后我就無法理解我的意思)。

另一方面,EBNF(擴展Backus–Naur格式)表示法更易於理解和維護。

from simpleparse.parser import Parser

grammar = r"""
<space>      := [ \t]
<newline>    := '\n'
<identifier> := [A-Za-z_],[A-Za-z0-9z_]*
match        := newline,identifier,space+,'WORD'
<junk>       := newline*,identifier,space+,-'WORD',(identifier/space)*
data         := (match/junk)*
"""

parser = Parser(grammar, 'data')

data = 'some junk\nvariable1 WORD\nvariable2 some ' +\
       'junk\nvariable3 WORD\nvariable4 some other ' +\
       'junk\nvariable5 WORD'

(start, matches, stop) = parser.parse(data)

print [ start for name, start, stop, other in matches ]

這將打印:

[9, 44, 85]

您可能需要根據目標從起點偏移索引。 如果希望通過'\\ n'換行,則必須在編譯中包括MULTILINE標志。

import re

mytext='\nvar1 WORD\nvar2 WORD\nvar3 WORD'
#compile a pattern to find the 'var*' after \n
pat = re.compile('\n(.*?)\s+WORD')

results = re.finditer(pat,mytext)

for result in results:
    print result.start()

嗯,事實證明,該文本實際上包含ctrl-M返回字符而不是換行符,這使我發瘋。 我刪除了那些,我只是使用了:

[m.start() for m in re.finditer('\w+\sWORD',contents)]

感謝您的所有幫助! 當然,Simpleparser也可以工作。

暫無
暫無

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

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