如何迭代计数器并将其包含在字符串替换中? (Python)
How do I iterate a counter and include it in a string replacement? (Python)
我正在使用 Python 3.6。我有一个源文件 (txt),每个句子都添加了 <s></s>
标签。源文件中可能有几百个句子。 (我会有很多这样的源文件,但现在我只处理一个。)我想搜索文本,找到每个出现的 <s>
并将其替换为 <s n="x">
其中 x
是一个从 1 开始的计数器,每个句子在 n="x"
属性中都有一个 x
的序号。完成的文本应如下所示:
<s n="1">This is the first sentence. </s><s n="2">This is the second sentence. </s> … <s n="nth">This is the nth sentence.</s>
我只需要更改开始标记中的数字,这与句子中的文本无关。
我想做这样的事情:
file_handle = open(file, 'r')
file_string = file_handle.read()
file_handle.close()
for counter, '<s>' in file_string:
file_string = file_string.replace('<s>', '<s n="' + str(counter) + '">')
我知道前三行不是 Pythonic,但它们在这种情况下发挥了作用(意味着获取字符串)。如果我应该使用字符串以外的东西,那么前三行需要更改。问题是,对于 file_string 中 <s>
的每个连续实例,我都没有尝试导致计数器移动到 counter+1。我得到的最好的是每个句子都有 <s n="1">
作为开始标记。
我尝试了枚举、替换、re.sub、匹配的各种组合,我面临着新手的经典“这很容易,但我看不到”的问题。 None 在我进行的搜索中找到了这个嵌入式计数器概念。
我怎样才能完成这个简单的任务?
作为初步,我创建 some_text
与您可能拥有的类似。
>>> some_text = 50*'<s>One sentence</s>'
>>> some_text
'<s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s>'
现在我可以使用正则表达式来识别每个 <s>
字符串,然后调用它的 .sub
方法来替换任何 do_it
函数 return
s那个字符串。
>>> n = 0
>>> import re
>>> def do_it(matchobj):
... global n
... n+=1
... return '<s n="%s">'%n
...
>>> re.sub(r'<s>', do_it, some_text)
'<s n="1">One sentence</s><s n="2">One sentence</s><s n="3">One sentence</s><s n="4">One sentence</s><s n="5">One sentence</s><s n="6">One sentence</s><s n="7">One sentence</s><s n="8">One sentence</s><s n="9">One sentence</s><s n="10">One sentence</s><s n="11">One sentence</s><s n="12">One sentence</s><s n="13">One sentence</s><s n="14">One sentence</s><s n="15">One sentence</s><s n="16">One sentence</s><s n="17">One sentence</s><s n="18">One sentence</s><s n="19">One sentence</s><s n="20">One sentence</s><s n="21">One sentence</s><s n="22">One sentence</s><s n="23">One sentence</s><s n="24">One sentence</s><s n="25">One sentence</s><s n="26">One sentence</s><s n="27">One sentence</s><s n="28">One sentence</s><s n="29">One sentence</s><s n="30">One sentence</s><s n="31">One sentence</s><s n="32">One sentence</s><s n="33">One sentence</s><s n="34">One sentence</s><s n="35">One sentence</s><s n="36">One sentence</s><s n="37">One sentence</s><s n="38">One sentence</s><s n="39">One sentence</s><s n="40">One sentence</s><s n="41">One sentence</s><s n="42">One sentence</s><s n="43">One sentence</s><s n="44">One sentence</s><s n="45">One sentence</s><s n="46">One sentence</s><s n="47">One sentence</s><s n="48">One sentence</s><s n="49">One sentence</s><s n="50">One sentence</s>'
我正在使用 Python 3.6。我有一个源文件 (txt),每个句子都添加了 <s></s>
标签。源文件中可能有几百个句子。 (我会有很多这样的源文件,但现在我只处理一个。)我想搜索文本,找到每个出现的 <s>
并将其替换为 <s n="x">
其中 x
是一个从 1 开始的计数器,每个句子在 n="x"
属性中都有一个 x
的序号。完成的文本应如下所示:
<s n="1">This is the first sentence. </s><s n="2">This is the second sentence. </s> … <s n="nth">This is the nth sentence.</s>
我只需要更改开始标记中的数字,这与句子中的文本无关。
我想做这样的事情:
file_handle = open(file, 'r')
file_string = file_handle.read()
file_handle.close()
for counter, '<s>' in file_string:
file_string = file_string.replace('<s>', '<s n="' + str(counter) + '">')
我知道前三行不是 Pythonic,但它们在这种情况下发挥了作用(意味着获取字符串)。如果我应该使用字符串以外的东西,那么前三行需要更改。问题是,对于 file_string 中 <s>
的每个连续实例,我都没有尝试导致计数器移动到 counter+1。我得到的最好的是每个句子都有 <s n="1">
作为开始标记。
我尝试了枚举、替换、re.sub、匹配的各种组合,我面临着新手的经典“这很容易,但我看不到”的问题。 None 在我进行的搜索中找到了这个嵌入式计数器概念。
我怎样才能完成这个简单的任务?
作为初步,我创建 some_text
与您可能拥有的类似。
>>> some_text = 50*'<s>One sentence</s>'
>>> some_text
'<s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s><s>One sentence</s>'
现在我可以使用正则表达式来识别每个 <s>
字符串,然后调用它的 .sub
方法来替换任何 do_it
函数 return
s那个字符串。
>>> n = 0
>>> import re
>>> def do_it(matchobj):
... global n
... n+=1
... return '<s n="%s">'%n
...
>>> re.sub(r'<s>', do_it, some_text)
'<s n="1">One sentence</s><s n="2">One sentence</s><s n="3">One sentence</s><s n="4">One sentence</s><s n="5">One sentence</s><s n="6">One sentence</s><s n="7">One sentence</s><s n="8">One sentence</s><s n="9">One sentence</s><s n="10">One sentence</s><s n="11">One sentence</s><s n="12">One sentence</s><s n="13">One sentence</s><s n="14">One sentence</s><s n="15">One sentence</s><s n="16">One sentence</s><s n="17">One sentence</s><s n="18">One sentence</s><s n="19">One sentence</s><s n="20">One sentence</s><s n="21">One sentence</s><s n="22">One sentence</s><s n="23">One sentence</s><s n="24">One sentence</s><s n="25">One sentence</s><s n="26">One sentence</s><s n="27">One sentence</s><s n="28">One sentence</s><s n="29">One sentence</s><s n="30">One sentence</s><s n="31">One sentence</s><s n="32">One sentence</s><s n="33">One sentence</s><s n="34">One sentence</s><s n="35">One sentence</s><s n="36">One sentence</s><s n="37">One sentence</s><s n="38">One sentence</s><s n="39">One sentence</s><s n="40">One sentence</s><s n="41">One sentence</s><s n="42">One sentence</s><s n="43">One sentence</s><s n="44">One sentence</s><s n="45">One sentence</s><s n="46">One sentence</s><s n="47">One sentence</s><s n="48">One sentence</s><s n="49">One sentence</s><s n="50">One sentence</s>'