因此,我尝试使用python3.4中的re模块(如果有必要的话,在运行mavericks的mac上)解析一堆文本文件中的引用。这里有一些最小的代码。请注意,有两个注释行:它们表示两个可选搜索。(很明显,小的一个r'Rawls'
是有效的)
def makeRefList(reffile):
print(reffile)
# namepattern = r'(^[A-Z1][A-Za-z1]*-?[A-Za-z1]*),.*( \(?\d\d\d\d[a-z]?[.)])'
# namepattern = r'Rawls'
refsTuplesList = re.findall(namepattern, reffile, re.MULTILINE)
print(refsTuplesList)
这个字符串很难看,所以我把它放在了一个要点上:https://gist.github.com/paultopia/6c48c398a42d4834f2ae
如前所述,搜索字符串r'Rawls'
产生预期的输出['Rawls', 'Rawls']
。但是,另一个搜索字符串只生成一个空列表。你知道吗
我已经用regex101测试仪确认了这个regex(部分)可以工作。在这里确认:https://regex101.com/r/kP4nO0/1——这个匹配我期望它匹配的东西。既然它在测试仪中工作,那么它应该在代码中工作,对吗?你知道吗
(注意,我从第一个print命令的终端输出复制了文本,然后用regex101的回车符手动替换字符串中的字符。)
一个可能的问题是python附加了字节码标志(小b称为“标志”吗?)到弦上。这是我尝试将文本从utf-8转换为ascii的产物,我还没有弄清楚如何使它消失。你知道吗
然而,re显然能够以这种形式解析字符串。我知道这一点,因为我正在将两个文本文件从utf-8转换成ascii,下面的代码在另一个字符串上运行得非常好,这个字符串是从另一个文本文件转换而来的,前面还有一个小b:
def makeCiteList(citefile):
print(citefile)
citepattern = r'[\s(][A-Z1][A-Za-z1]*-?[A-Za-z1]*[ ,]? \(?\d\d\d\d[a-z]?[\s.,)]'
rawCitelist = re.findall(citepattern, citefile)
cleanCitelist = cleanup(rawCitelist)
finalCiteList = list(set(cleanCitelist))
print(finalCiteList)
return(finalCiteList)
上面代码正确匹配的另一段文本:https://gist.github.com/paultopia/a12eba2752638389b2ee
我能想到的唯一一个假设是,第一个被破坏的regex表达式在新行字符和被视为字节对象的字符串的组合上吐出,尽管a)我知道regex对于新行是正确的(因为,来自链接regex101的确认),b)我知道它与字符串匹配(因为,从另一个字符串的成功匹配中得到确认)。你知道吗
如果这是真的,我不知道该怎么办。你知道吗
因此,问题是:
1)我的假设正确吗,是新行和b
的组合炸毁了我的正则表达式?如果没有,是什么?
2) 我该怎么修?
a) 用字符串中的内容替换换行符?
b) 重写正则表达式?
c) 以某种方式摆脱b
并使它再次成为一个正常的字符串?(怎么做?)你知道吗
谢谢!你知道吗
添加
如果这是我需要在上游解决的问题,下面是我用来获取文本文件并转换为ascii的代码,替换非ascii字符:
在mavericks中textwrangler保存的utf-8.txt文件上调用此函数
def makeCorpoi(citefile, reffile):
citebox = open(citefile, 'r')
refbox = open(reffile, 'r')
citecorpus = citebox.read()
refcorpus = refbox.read()
citebox.close()
refbox.close()
corpoi = [str(citecorpus), str(refcorpus)]
return corpoi
然后对上面函数返回的列表的每个元素调用这个函数。你知道吗
def conv2ASCII(bigstring):
def convHandler(error):
return ('1FOREIGN', error.start + 1)
codecs.register_error('foreign', convHandler)
bigstring = bigstring.encode('ascii', 'foreign')
stringstring = str(bigstring)
return stringstring
啊。我已经找到了答案并回答了我自己的问题。显然,需要对解码的东西调用某种编码方法。下面的代码生成了一个实际的字符串,其中包含换行符和所有内容,另一端(不过现在我必须先修复一堆其他错误,然后才能确定最终输出是否如预期的那样):
显然
str()
函数做不到同样的工作,原因对我来说很神秘。尽管这里有一个答案How to make new line commands work in a .txt file opened from the internet?表明确实如此。你知道吗相关问题 更多 >
编程相关推荐