单独的相似行之间的正则表达式

时间:2017-09-20 13:42:02

标签: regex notepad++

我有以下文字。

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。

有什么建议吗?

1 个答案:

答案 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

修改正则表达式模式