Python 3.每一行由一段文本构成,然后是管道符号,然后是第二段文本。 我想交换两段文字并删除管道。 这是到目前为止的代码:
p = re.compile('^(.*) \| (.*)$', re.IGNORECASE)
mytext = p.sub(r'\2\1', mytext)
但由于某种原因,我无法解决问题,因此无法匹配。 它应该匹配的文本样本(具有讽刺意味):
(https://www.youtube.com/watch?v=NIKdKCQnbNo) | [Regular Expressions 101 - YouTube]
并且最终应该像:
[The Field Expedient Pump Drill - YouTube](https://www.youtube.com/watch?v=4QDXUxTrlRw)
(换句话说,代码将链接格式化为降价转换器的预期格式)。
以下是完整代码:
#! /usr/bin/env python3
import re, os
def create_text(myinputfile):
with open(myinputfile, 'r', encoding='utf-8') as infile:
mytext = infile.read()
return mytext
def reg_replace(mytext):
p = re.compile('^(.*) \| (.*)$', re.IGNORECASE)
mytext = p.sub(r'\2\1', mytext)
return mytext
def write_out(mytext, myfinalfile):
with open(myfinalfile, 'w') as myoutfile:
myoutfile.write(mytext)
def main():
mytext = create_text('out.md')
mytext = reg_replace(mytext)
write_out(mytext, 'out1.md')
os.rename("out.md", "out_original.md")
os.rename("out1.md", "out.md")
main()
答案 0 :(得分:1)
答案 1 :(得分:0)
抱歉,如果我在这里遗漏了一些内容,但为什么不将re.match
与群组而不是re.sub
一起使用?:
import re
p = re.compile('^(.*) \| (.*)$', re.IGNORECASE)
sample = "(https://www.youtube.com/watch?v=NIKdKCQnbNo) | [Regular Expressions 101 - YouTube]"
matches = p.search(sample)
new_string = "{0}{1}".format(matches.group(2), matches.group(1))
print(new_string)
>>> [Regular Expressions 101 - YouTube](https://www.youtube.com/watch?v=NIKdKCQnbNo)