[英]Python Pandas - Flag if timestamp falls between multiple start and end times
[英]Finding a pattern multiple times between start and end patterns python regex
我試圖在多行的開始和結束模式之間找到某種模式。 這是我的意思:
我讀取了一個文件並將其保存在變量File中,這就是原始文件的樣子:
文件:
...
...
...
Keyword some_header_file {
XYZ g1234567S7894561_some_other_trash_underscored_text;
XYZ g1122334S9315919_different_other_trash_underscored_text;
}
...
...
...
我正在嘗試抓住g和S之間的1234567以及1122334 。 some_header_file塊可以是任意數量的行,但始終以}結尾。因此,我嘗試從特定關鍵字的“關鍵字”到“}”的所有行在g和S之間准確地抓住7位數字。
這是我用的:
FirstSevenDigitPart = str(re.findall(r"Keyword\s%s.*\n.*XYZ\s[gd]([0-9]{7})[A-Z][0-9]{7}.*\}"%variable , str(File) , flags=re.MULTILINE))
但是不幸的是它什么也沒返回。.只是空白[]我在做什么錯? 我怎樣才能做到這一點? 提前致謝。
我認為這里最簡單的方法是使用兩個表達式並分兩步運行它。 有一個小例子。 當然,您應該根據需要對其進行優化。
import re
text = """Keyword some_header_file {
XYZ g1234567S7894561_some_other_trash_underscored_text;
XYZ g1122334S9315919_different_other_trash_underscored_text;
}"""
all_lines_pattern = 'Keyword\s*%s\s*\{\n(?P<all_lines>(.|\s)*)\}'
first_match = re.match(all_lines_pattern % 'some_header_file', text)
if first_match is None:
# some break logic here
pass
found_lines = first_match.group(1)
print(found_lines) # ' XYZ g1234567S7894561_some_other_trash_underscored_text;\n XYZ g1122334S9315919_different_other_trash_underscored_text;\n '
sub_pattern = '(XYZ\s*[gd](?P<your_pattern>[0-9]{7})[A-Z]).*;'
found_groups = re.findall(sub_pattern, found_lines)
print(found_groups) # [('XYZ g1234567S', '1234567'), ('XYZ g1122334S', '1122334')]
您可以將文件讀入contents
變量並使用
import re
contents = "...\n...\n...\nKeyword some_header_file {\n XYZ \ng1234567S7894561_some_other_trash_underscored_text;\n XYZ \n1122334S9315919_different_other_trash_underscored_text;\n}\n...\n...\n..."
results = []
variable = 'some_header_file'
block_rx = r'Keyword\s+{}\s*{{([^{{}}]*)}}'.format(re.escape(variable))
value_rx = r'XYZ\s[gd]([0-9]{7})[A-Z][0-9]{7}'
for block in re.findall(block_rx, contents):
results.extend(re.findall(value_rx, block))
print(results)
# => ['1234567', '1122334']
參見Python演示 。
第一個正則表達式( block_rx
)看起來像Keyword\\s+some_header_file\\s*{([^{}]*)}
,並將匹配您需要在其中搜索值的所有塊。第二個正則表達式XYZ\\s[gd]([0-9]{7})[AZ][0-9]{7}
,匹配您需要的內容並返回捕獲列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.