Python:检查括号中是否有字符串

时间:2017-01-02 21:37:18

标签: javascript python refactoring

我正在写一个python脚本来排序文件中的干净代码..主要是Javascript文件所以我到目前为止所做的是删除换行符并在每个半冒号后结束行,但我想做的是检查一个字符串是否在括号之间,如果它不是那么我想在一个分号后结束该行,如果它是我想让它一个人并继续..我猜我需要使用读取行?下面是我正在讨论的输出示例

for(var c=clus.length-1;

0<=c;

c--){var e=clus[c];

正如你所看到的,它在每个半结肠后结束了这一行,但我不希望在括号之间发生这种情况..对此有何帮助?这是我的代码..

import re, getpass, time

curUser=str(getpass.getuser())                                                              # Get Current User;

dateOfUse=str(time.strftime('%x'))                                                          # Get Current Date;

FileToRead=open(r'C:/Users/' + curUser + '/Desktop/script.js', 'r')                        # File to open;

FileToWrite=open(r'C:/Users/' + curUser + '/Desktop/generated2.js', 'w')                    # File to Write / Will replace file if exists;

data=str(FileToRead.read())                                                                 # Read our file;

data=data.replace('\n', '').replace('\r', '')                                               # Remove all Line Breaks to bring code together;

data=re.sub(r'(;)', r';\n\n', data)                                                         # End line after every Semi-colon;

FileToWrite.write('/* Cleaned ' + dateOfUse + ' */\n\n' + data)                             # Write data to our new file;

1 个答案:

答案 0 :(得分:0)

对于我之前的回答,我道歉,我并不完全理解你的问题。

因此,在我看来,最好的方法是实现堆栈。查看堆栈here的详细解释。

因此,使用堆栈时要记住的重要事项是 LIFO 概念。 LIFO 代表Last in First out。在餐厅画一堆盘子,你总是拿着堆叠顶部的盘子,而不是底部的盘子。

概念

现在把它放在你的特定环境中,堆栈将作为一种方式来判断你是否处于不同的范围之间。您逐行和逐个字符地分析文本。每次遇到打开的"("字符时,都会将True布尔值推送到堆栈。同样,每次遇到结束")"字符时,都会从堆栈中取出(pop())一个值。

实施例

想象如下:

for(var c=clus.length-1; 0<=c; c--)

首先,初始化堆栈时,它是空的。 当您遇到第一个开放字符"("时,会将True值推送到堆栈。 现在,使用以下表达式:

if paranthesesDetector.isEmpty()

将评估为false;因为你的堆栈不是空的,这意味着你处于两性之间。

当您遇到结束字符")"时,您只需在堆栈顶部弹出(取出)一个值。 现在,使用以下表达式:

if paranthesesDetector.isEmpty()
由于您的堆栈为空,

将评估为True这意味着您不再处于parantheses之间

这是我做的堆栈实现的简单示例:

import re, getpass, time

curUser=str(getpass.getuser())

dateOfUse=str(time.strftime('%x'))


class Stack:                                #Implementation of stack
                            #https://interactivepython.org/runestone/static/pythonds/BasicDS/ImplementingaStackinPython.html
     def __init__(self):
         self.items = []

     def isEmpty(self):
         return self.items == []

     def push(self, item):
         self.items.append(item)

     def pop(self):
         return self.items.pop()

     def peek(self):
         return self.items[len(self.items)-1]

     def size(self):
         return len(self.items)


def copy(data):
    """
        Function that copies text contained within 'data'
        to a destination text file
    """
    with open('./generated2.js', 'w') as FileToWrite:
        FileToWrite.write('/* Cleaned ' + dateOfUse + ' */\n\n')
        i = 0
        for each in data:       #Write each line in the destination file
            FileToWrite.write(each)



with open('script.js', 'r') as FileToRead:
    paranthesesDetector = Stack()                   #Instantiate Stack object
    data = []
    for eachLine in FileToRead:                     #Loop that reads every line and appends them to a list
        for eachChar in eachLine:
            if eachChar == "(":
                paranthesesDetector.push(True)
            elif eachChar == ")":
                paranthesesDetector.pop()

        if paranthesesDetector.isEmpty():           #Detect if between parantheses
            pass                                    #HERE do whateber you want

copy(data)          #Copy the data contained in the 'data' list to the destination file