python将句子中两个子串位置互换的…

原创 2016年08月29日 12:51:13
想要将文中所有的类似
AA\cite{JAP77, Solid3439}BB\cite{JAP89, Solid3439}CC
替换为
AA\cite{JAP77, Solid3439}BB\cite{JAP89, Solid3439}CC
与 \cite{....} 互换位置

采用非贪婪匹配,边界条件都用*?来匹配即可。

import sys 
import os 
import re

def changefile(filename):
    p = re.compile(r"(.*?)(。)(\\cite{.*?})(.*?)")
    
    with open(filename,'r') as FILEIN:
        with open("New"+filename,'w') as FILEOUT:
            for line in FILEIN.readlines():
                line = p.sub(r'\1\3\2\4', line)
                FILEOUT.write(line)


    FILEIN.close()
    FILEOUT.close()


if __name__ == '__main__':
    changefile("C1-CHAP3.tex")



非贪婪匹配:
先看一个例子 

举例: 

源字符串:aa
test1
bb
test2
cc 

正则表达式一:
.*
 

匹配结果一:
test1
bb
test2
 

正则表达式二:
.*?
 

匹配结果二:
test1
(这里指的是一次匹配结果,所以没包括
test2
) 


另外有一点需要注意的是。我们都知道 r'...' 对字符串不进行转义。但是要注意的是,在正则表达式中该转义的还是需要转义。这是正则表达式的需要,而不能仅仅看作是一个字符串。
例如对于下面一句话,
aaaaaaaaa$     bbbbbbbbbbbbbbbbb
我们想要吧$符号后面的空格全删除,需要这样做。
p = re.compile(r'\$\s*')  
 #虽然有r''。但这里是正则表达式,所以需要加\$  否则在正则表达式里的意思就是结尾符号了
line = re.sub(p , r"$",line) #这里就是要替换为 r"$",这是一个字符串,不需要转义
结果就是
aaaaaaaaa$bbbbbbbbbbbbbbbbb

相关文章推荐

python中交换两个变量

之前有段时间想用python写个交换两个变量的值的函数,我们知道在C++中是传入两个变量的指针或者引用,但是python中并没有指针或者引用的概念,而且资源回收全部由python的运行环境接管了,要实...

C++面试题之写一个在一个字符串中寻找一个子串第一个位置的函数

C++面试题之 写一个在一个字符串中寻找一个子串第一个位置的函数

交换两个子数组的位置(只使用1个辅助空间)

一、问题描述 其实这是一个非常基本和常用的数组操作,它的描述如下: 有一数组X[0...n-1],现在把它发为两个子数组x1[0...m]和x2[m+1...n-1],交换这两个子数组,使用数组x由x...

Python查找第n个子串小技巧

Python查找第n个子串小技巧ProblemPython中str类自带的find、index方法可以返回第一个匹配的子串的位置,但是如果实际使用中需要查找第2个甚至第n个子串的位置该怎么办呢。也许有...

POJ 2479 (算不上简单的dp,可以称为简单的求两个子串和最大)

题意: 题意很简单,给n个数,求出两个无交叉的两段和最大,输出和。 思路: 一般会想到,求两次子串,但是问题是这样会出现重合的现象。 所以按照书上的方法是不合适的,所以需要另寻方法。问...

在大字符串中返回一个子字符串的的位置

#include using namespace std; char* search(char *dst,char *src); void main() { char *string1="yang ...

简单LinuxC程序关于倒置句子中的单词位置(字符串逆序应用)

题目:编写一个C函数,将”I am from shanghai ”倒置为”shanghai from am I”,及将句子中的单词位置倒置,而不改变单词内部结构。...

简单LinuxC程序关于倒置句子中的单词位置(指针的使用)

编写一个C函数,将句子中的单词位置倒置,而不改变单词内部结构。 例如:输入I am from shanghai,输出shanghai from am I。 要求:使用指针交换两个变量的值。...

使用python的os.fork()为一个主进程生成多个子进程

先熟悉一下基础: 语句pid=os.fork(),会为当前进程产生一个子进程并返回两个值,为父进程返回子进程的进程ID,为子进程返回0。 语句r,w=os.pipe(),将创建一个读写的单向管道,用于...
  • tdmyl
  • tdmyl
  • 2013年08月28日 22:28
  • 3301
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python将句子中两个子串位置互换的…
举报原因:
原因补充:

(最多只允许输入30个字)