我有以下文字。
CBEAM 241678 245002 240528 240628 10. 0. 10. GOO
0. 0.2750 0. 0. 0.2750 0.
CBEAM 241697 245002 240230 240330 10. 0. 10. GOO
0. 0.2750 0. 0. 0.2750 0.
CBEAM 241698 245002 240330 240430 10. 0. 10. GOO
0. 0.2750 0. 0. 0.2750 0.
CBEAM 241699 245002 240430 240530 10. 0. 10. GOO
0. 0.2750 0. 0. 0.2750 0.
CBEAM 241700 245002 240530 240630 10. 0. 10. GOO
0. 0.2750 0. 0. 0.2750 0.
CBEAM 241708 245002 240231 240331 10. 0. 10. GOO
0. 0.2750 0. 0. 0.2750 0.
CBEAM 241709 245002 240331 240431 10. 0. 10. GOO
0. 0.2750 0. 0. 0.2750 0.
CBEAM 241710 245002 240431 240531 10. 0. 10. GOO
0. 0.2750 0. 0. 0.2750 0.
CBEAM 241711 245002 240531 240631 10. 0. 10. GOO
0. 0.2750 0. 0. 0.2750 0.
我试图捕获.2750的两次出现,取决于它上面第二列的数字。
例如,查看第2列中的数字,我想更改" .2750" s为" CBEAM 241699"这意味着我需要一个搜索表达式来抓取直接位于线下的.2750" CBEAM 241699"。
理想情况下,我希望我的搜索表达式能够搜索和替换多个" CBEAM XXXXXX"我知道将使用" CBEAM 241710 | 241711"等
我的正则表达式的问题涉及尝试捕获换行符上的数据,而不是用它来抓取所有其他DATA。
有什么建议吗?
答案 0 :(得分:-1)
此正则表达式匹配您在第1组和第2组中要查找的内容:
(?<=CBEAM 241699|CBEAM 241711).*?(0\.2750).*?(0\.2750)
你想直接在记事本++中使用正则表达式一次捕获文本的几个部分吗?我认为这是不可能的,但我不知道记事本++。 您必须编写一个脚本来解析您的文本,抓取组并替换内容。
例如使用python3,你可以这样做:
infilepath = "intext.txt"
targetNumbers = ['241699', '241711']
replaceFirst = 'whatever'
replaceSecond = 'whatever2'
with open(infilepath) as text:
text = text.read()
for targetNumber in targetNumbers:
text = re.sub(r'(?<=CBEAM '+str(targetNumber)+r')(.*?)(?:0\.2750)(.*?)(?:0\.2750)(?su)', '\g<1>'+replaceFirst+'\g<2>'+replaceSecond, text)
with open('outtext.txt', 'w') as newtext:
newtext.write(text)*
请注意,正在根据this response
修改正则表达式模式