解析一个字符串,多个定界符返回带有样式和文本的元组列表
parse a string multiple delimiters returning list of tuples with style and text
我正在尝试解析一个字符串,其中包含一些降价样式的分隔符。我需要一个带有样式的列表。我已经尝试使用 pyparsing 并取得了一些成功,但感觉可能有更好的方法(基本上使用 mbeaches 在 http://pyparsing.wikispaces.com/ 的 post)。
基本上,如果我有一个字符串
word_paragraph = "This is **bold** and this is *italic* sample"
我想 return 提供元组列表:
style_delim = {'Bold': '**', 'Italics':'*', }
word_pg_parsed = somefunction(word_paragraph,style_delim)
这将导致 word_pg_parsed 类似于:
word_pg_parsed = [('Normal','This is '),('Bold','bold'),('Normal','and this is '),('Italics','italic'),('Normal',' sample')]
我查看了 markdown,但找不到此功能存在的位置。我怀疑有一个库(深入 PLY 但找不到我想要的)可以正确处理这个问题。
为什么?我正在尝试使用 python-docx 文件创建一个 word 文件,其中包括一些标记文本中的一些文本,并且需要相应地处理内联字符样式。 python-markdown 或其他库中是否有人看到过这样做的东西?
如果有人想要这样做,这就是我的发现。非常感谢 Waylan 为我指出了 mistune 和图书馆的 lepture。
default_output 方法已替换为占位符。这是您需要覆盖以获取列表而不是字符串的那个。此处引用:https://github.com/lepture/mistune/pull/20
基本上遵循测试用例中的内容:
https://github.com/lepture/mistune/blob/878f92bdb224a8b7830e8c33952bd2f368e5d711/tests/test_subclassing.py getattribute 确实是必需的,否则你会在列表上调用字符串函数时出错。
在 test_subclassing.py.
中寻找 TokenTreeRenderer
在 django 中重复这里 views.py 我的工作示例:
from django.shortcuts import render
from .forms import ParseForm # simple form with textarea field called markup
import mistune
class TokenTreeRenderer(mistune.Renderer):
# options is required
options = {}
def placeholder(self):
return []
def __getattribute__(self, name):
"""Saves the arguments to each Markdown handling method."""
found = TokenTreeRenderer.__dict__.get(name)
if found is not None:
return object.__getattribute__(self, name)
def fake_method(*args, **kwargs):
return [(name, args, kwargs)]
return fake_method
def parse(request):
context = {}
if request.method == 'POST':
parse_form = ParseForm(request.POST)
if parse_form.is_valid():
# parse the data
markdown = mistune.Markdown(renderer=TokenTreeRenderer())
tokenized = markdown(parse_form.cleaned_data['markup'])
context.update({'tokenized': tokenized, })
# no need for a redirect in this case
else:
parse_form = ParseForm(initial={'markup': 'This is a **bold** text sample', })
context.update({'form': parse_form, })
return render(request, 'mctests/parse.html', context)
这导致输出:
[('paragraph', ([('text', (u'This is a ',), {}), ('double_emphasis', ([('text', (u'bold',), {})],), {}), ('text', (u' text sample',), {})],), {})]
这对我很有用。
我正在尝试解析一个字符串,其中包含一些降价样式的分隔符。我需要一个带有样式的列表。我已经尝试使用 pyparsing 并取得了一些成功,但感觉可能有更好的方法(基本上使用 mbeaches 在 http://pyparsing.wikispaces.com/ 的 post)。
基本上,如果我有一个字符串
word_paragraph = "This is **bold** and this is *italic* sample"
我想 return 提供元组列表:
style_delim = {'Bold': '**', 'Italics':'*', }
word_pg_parsed = somefunction(word_paragraph,style_delim)
这将导致 word_pg_parsed 类似于:
word_pg_parsed = [('Normal','This is '),('Bold','bold'),('Normal','and this is '),('Italics','italic'),('Normal',' sample')]
我查看了 markdown,但找不到此功能存在的位置。我怀疑有一个库(深入 PLY 但找不到我想要的)可以正确处理这个问题。
为什么?我正在尝试使用 python-docx 文件创建一个 word 文件,其中包括一些标记文本中的一些文本,并且需要相应地处理内联字符样式。 python-markdown 或其他库中是否有人看到过这样做的东西?
如果有人想要这样做,这就是我的发现。非常感谢 Waylan 为我指出了 mistune 和图书馆的 lepture。
default_output 方法已替换为占位符。这是您需要覆盖以获取列表而不是字符串的那个。此处引用:https://github.com/lepture/mistune/pull/20
基本上遵循测试用例中的内容: https://github.com/lepture/mistune/blob/878f92bdb224a8b7830e8c33952bd2f368e5d711/tests/test_subclassing.py getattribute 确实是必需的,否则你会在列表上调用字符串函数时出错。
在 test_subclassing.py.
中寻找 TokenTreeRenderer在 django 中重复这里 views.py 我的工作示例:
from django.shortcuts import render
from .forms import ParseForm # simple form with textarea field called markup
import mistune
class TokenTreeRenderer(mistune.Renderer):
# options is required
options = {}
def placeholder(self):
return []
def __getattribute__(self, name):
"""Saves the arguments to each Markdown handling method."""
found = TokenTreeRenderer.__dict__.get(name)
if found is not None:
return object.__getattribute__(self, name)
def fake_method(*args, **kwargs):
return [(name, args, kwargs)]
return fake_method
def parse(request):
context = {}
if request.method == 'POST':
parse_form = ParseForm(request.POST)
if parse_form.is_valid():
# parse the data
markdown = mistune.Markdown(renderer=TokenTreeRenderer())
tokenized = markdown(parse_form.cleaned_data['markup'])
context.update({'tokenized': tokenized, })
# no need for a redirect in this case
else:
parse_form = ParseForm(initial={'markup': 'This is a **bold** text sample', })
context.update({'form': parse_form, })
return render(request, 'mctests/parse.html', context)
这导致输出:
[('paragraph', ([('text', (u'This is a ',), {}), ('double_emphasis', ([('text', (u'bold',), {})],), {}), ('text', (u' text sample',), {})],), {})]
这对我很有用。