Python 删除Tkinter条目中的最后一个空行

Python 删除Tkinter条目中的最后一个空行,python,regex,tkinter,Python,Regex,Tkinter,python版本3.9.2 脚本的作用和问题的根源 下面的脚本将'\n'替换为'-o-name',以分隔每个项目 输入将始终采用此格式(从excel复制) 请注意,它将始终有空行,因为复制和粘贴创建了它 期望输出: A.class -o -name B.class -o -name C.class 但输入的空白行产生问题。 脚本的输出: A.class -o -name B.class -o -name C.class -o -name 简言之,我希望每个'\n',但最后一行都替换为

python版本3.9.2

脚本的作用和问题的根源

下面的脚本将'\n'替换为'-o-name',以分隔每个项目

输入将始终采用此格式(从excel复制)

请注意,它将始终有空行,因为复制和粘贴创建了它

期望输出:

A.class -o -name B.class -o -name C.class  

但输入的空白行产生问题。

脚本的输出:

A.class -o -name B.class -o -name C.class -o -name  
简言之,我希望每个'\n',但最后一行都替换为'-o-name'

资料来源:

from tkinter import *
import re

win = Tk()
win.title("Find command for evidence doc")
win.resizable(0,0)


#Converting
def replace():

    # removing blank line <- THIS needs to be improved
    original = entry.get("1.0",'end')
    original = re.sub(r'\n\s*\n','\n',original,re.MULTILINE)
    print(original)
    
    # Replace .java to .class
    javaToClass = re.compile(re.escape('.java'), re.IGNORECASE)
    converted = \
    "find . \( -name " + javaToClass.sub('.class',original).replace("\n", " -o -name ") + "\) -exec ls -gG --color {} \; | grep '[^/]*$'i"

    # Copy to clipboard
    clip = Tk()
    clip.withdraw()
    clip.clipboard_clear()
    clip.clipboard_append(converted)
    clip.destroy()

    # output
    output.delete("1.0",'end')
    output.insert(END, str(converted))

# Componants
l1 = Label(win, text="Enter text:")
entry = Text(win, width=70, height=15, wrap=WORD)
button = Button(win, text="Convert", width=20)
l2 = Label(win, text="Converted text: (auto copied to clipboard)")
output = Text(win, width=70, height=15, wrap=WORD)


l1.grid(row=1, column=1, padx=5, sticky=W)
entry.grid(row=2, column=1, columnspan=2, padx=5, pady=(0,10))
button.grid(row=3, column=1, columnspan=2, pady=5)
l2.grid(row=4, column=1, padx=5, sticky=W)
output.grid(row=5, column=1, columnspan=2, padx=5, pady=(0,10))

button.configure(command=replace)

win.mainloop()
从tkinter导入*
进口稀土
win=Tk()
win.title(“证据文件查找命令”)
win.可调整大小(0,0)
#转换
def replace():

#删除空行您可以更改模式以检测所有后跟字母的
\n

然后将匹配的
\n
替换为
-o-name
,并使用
strip()
删除最后的
\n

string = '''A.java  
B.java  
C.java  
  '''

pattern = r'\n(?=[a-zA-Z])'
replace = '-o -name '
re.sub(pattern, replace, string).strip()

#'A.java  -o -name B.java  -o -name C.java'

您可以更改模式,以检测所有后跟字母的
\n

然后将匹配的
\n
替换为
-o-name
,并使用
strip()
删除最后的
\n

string = '''A.java  
B.java  
C.java  
  '''

pattern = r'\n(?=[a-zA-Z])'
replace = '-o -name '
re.sub(pattern, replace, string).strip()

#'A.java  -o -name B.java  -o -name C.java'

我相信这可以用re来完成,但是有一种简单的python方法,如果输入总是采用这种格式的话

如果你能在一个列表中得到文件名,然后在列表中添加“.class-o-name”并加入它们,那么问题就解决了

将每个元素与“.class-o-name”连接,这样最后一个元素就不在了,怎么样

finished = " -o -name ".join(i.replace(".jave",".class") for i in orignal.split())

我相信这可以用re来完成,但是有一种简单的python方法,如果输入总是采用这种格式的话

如果你能在一个列表中得到文件名,然后在列表中添加“.class-o-name”并加入它们,那么问题就解决了

将每个元素与“.class-o-name”连接,这样最后一个元素就不在了,怎么样

finished = " -o -name ".join(i.replace(".jave",".class") for i in orignal.split())

如果字符串以
'\n'
结尾,请使用
.strip()
将其删除。如果字符串以
'\n'
结尾,请使用
.strip()
将其删除。