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既具有普通程序开发语言的特点,也具有Matlab语言用于数值计算的特点,,当然了数值计算是由其其强大的第三方库numpy实现的,矩阵在python中数据类型是ndarray,python中...
  • github_34777264
  • github_34777264
  • 2017年12月23日 13:24
  • 97

python两个数值互换(浅析a,b=b,a原理)

python交换两个值得方法非常简单,即a,b=b,a,一步操作就交换了两个值,那么这是为什么呢?真相:Python的变量并不直接存储值,而只是引用一个内存地址,交换变量时,只是交换了引用的地址。先看...
  • qq_33414271
  • qq_33414271
  • 2017年11月13日 17:02
  • 764

Java 集合中元素交换位置的两种实现方式

package com.crystal.didemo.interfaces;import java.util.Collections; import java.util.List;/** * 集...
  • crystalddd
  • crystalddd
  • 2017年06月10日 00:23
  • 3615

Java实现以字符串某一位置为界,将它之前的部分与之后的部分互换位置

下面的代码主要解决的问题是:给定一个字符串str和一个整数i,i代表字符串中某一个元素的下标,将str[0..i-1]移到这个元素的右侧,将str[i+1..len(str)-1]移到这个元素的左侧。...
  • tang_fei
  • tang_fei
  • 2017年02月27日 11:12
  • 1265

Axure之交换位置实现

我的思路是给两个元件交换坐标 1.设置全局变量 thisx, thisy 是矩形1的xy坐标 bx, by 是矩形2的xy坐标   2.设置载入时把矩形的坐标赋给变量 ...
  • zjy15203167987
  • zjy15203167987
  • 2016年12月28日 14:12
  • 1357

JS数组&两值交换不使用第三变量

数组对象的作用是:使用单独的变量名来存储一系列的值! 1. shift:删除原数组第一项,并返回删除元素的值,如果数组为空则返回undefined 2. unshift:将参数添加到原数组开头,并返回...
  • ligang2585116
  • ligang2585116
  • 2014年12月20日 23:01
  • 7267

JavaScript实现多个div块之间相互拖放,交换位置(内容)

自己写的一个小页面,直接放代码。 数据源配置:配置 *{ mar...
  • wfr18314536093
  • wfr18314536093
  • 2016年09月08日 11:14
  • 2258

【Python】变量数值交换、判断数组是否含有某个元素

本来,这两个问题都属于的编程入门简单得不能再简单的问题,根本就不值得写篇记录来记录的。 一、变量数值交换 先说变量数值交换,从C语言开始,我们就知道要先设置一个临时变量,再把某元素的值覆盖此临时变量,...
  • yongh701
  • yongh701
  • 2015年08月21日 10:58
  • 3089

python脚本交换要素XY坐标

在实际工作中你可能会遇到这样的问题,将空间图形的XY坐标进行反转,如下图所示: 三种类型的要素都可以完成XY坐标点的互换操作。 整个处理的思路为: 1.获取输入要素,然后逐个进行遍历 2.同时...
  • esricd
  • esricd
  • 2014年02月13日 14:14
  • 2446

sed交换任意两行

sed -n 'A{h;n;B!{:a;N;C!ba;x;H;n};x;H;x};p' 文件 解释: A、B分别是需要交换的行,C是B-1 思路: 对于交换相邻的行 sed -n 'A{h;n;x;H...
  • huangjin0507
  • huangjin0507
  • 2016年04月27日 17:25
  • 1239
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python将句子中两个子串位置互换的…
举报原因:
原因补充:

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