我的文本带有带开/关双括号标签[[tag]] / [[// tag]],并且我想对标签中除文本之外的所有文本应用特定功能。
我已经看过python解析器,但是它们非常复杂,我无法使其正常工作。
举个例子,我要转换:
“文本文本[[tag]]文本[[/ tag]]文本[[tag]]文本[[/ tag]]文本”
在
“ TEXT TEXT TEXT [[tag]]文本text [[/ tag]] TEXT TEXT TEXT [[tag]]文本text [[/ tag]] TEXT TEXT”
答案 0 :(得分:1)
使用re:
import re
# raw text example
raw_text = "text text text [[tag]] text text [[/tag]] text text text [[tag]] text text [[/tag]] text text"
# get text outside tags
convert_text = re.split('\[\[tag\]\].*?\[\[/tag\]\]',raw_text)
convert_text = [string.upper() for string in convert_text]
# get text inside tags with tags
remaining_parts = re.findall('\[\[tag\]\].*?\[\[/tag\]\]', raw_text)
remaining_parts.extend(' ')
# zip two lists
zipped_data = list(zip(convert_text, remaining_parts))
# convert into list
data = []
for item in zipped_data:
data.append(item[0])
data.append(item[1])
# join strings
out_string = ''.join(data)
输出:
TEXT TEXT TEXT [[tag]] text text [[/tag]] TEXT TEXT TEXT [[tag]] text text [[/tag]] TEXT TEXT
答案 1 :(得分:0)
您需要保留一个标志以检查标签的开始和结束。类似于下面的代码,
>>> s = "text text text [[tag]] text text [[/tag]] text text text [[tag]] text text [[/tag]] text text"
>>> new_string = []
>>> caps=True
>>> for el in s.split():
if '/' in el:
caps=True
new_string.append(el)
continue
elif '[[' in el:
caps=False
if caps:
new_string.append(el.upper())
else:
new_string.append(el)
>>> " ".join(new_string)
'TEXT TEXT TEXT [[tag]] text text [[/tag]] TEXT TEXT TEXT [[tag]] text text [[/tag]] TEXT TEXT'
答案 2 :(得分:0)
带有标记的东西应该会有所帮助。
def customtag(string):
lock = 0
fstring = ''
for st in string.split(' '):
if '[' not in st and lock != 1:
fstring += f'{st.upper()} '
else:
lock = 1
fstring += f'{st} '
if '/' in st:
lock = 0
print(fstring)
return fstring
customtag("text text text [[tag]] text text [[/tag]] text text text [[tag]] text text [[/tag]] text text")
答案 3 :(得分:0)
这是使用堆栈的另一种方法。
"email": "email\\@gmail.com"