我的文字包含我的数据描述,并以两组数据结束:
LONG TEXT - TAGS:(Array of TAGS) - URL
我需要解析这个文本并构建我的数据。
我的想法是拥有类似的东西:
a="LONG TEXT. Tags:[ex1,ex2,ex3]"
并使用a = a.partition("Tags:")
(partition
拆分arg上的文字),这样我就可以获得a[0]
上的长文本和a[2]
上的标记,然后我将其拆分为获取所有单个标签。如果"Tags:"
位于LONG TEXT
,则可能会出现此问题,但我可以Tags:
使其唯一,以使其有效。
我在如何存储网址时遇到问题。我猜测在URL上对字符串进行分区也可以起作用,但我相信在正则表达式中有更好的方法可以更好地处理数据。我应该如何构建我的数据,以便在存储在文本中时检索它们?
更新:我可以告诉我的用户以某种方式构建他们的数据,但它需要很容易。对于输出,我只需要文本,字符串数组和URL。
例如,我可以告诉我的用户输入:
"This is a long text, which is the original description which I have to get and
store as text in my database.
TAGS:[Tag1,Tag 2]
URL:http://google.com"
或者我可以告诉他们将其结构化为YAML格式。但我的目标是简单。
如果说我使用上面的输入,那么正则表达式的最佳方法是什么:
"This is a long text, which is the original description which I have to get and
store as text in my database."
array of "Tag1", "Tag 2"
"http://google.com"
答案 0 :(得分:1)
最好的要做的就是给用户一个简单(但评论很好)的模板,他们可以编辑这些模板,并让他们将YAML粘贴到自由格式中文本域。 YAML非常人性化,可以手工编辑。然后可以将YAML轻松解析为Hash,以便在您的应用程序中使用。
以下是YAML标记的基本示例,其中 description ,标记和 url 定义为哈希键。您可以看到用户修改是多么容易,只要他们注意缩进连续的行。
:description: This is a long text, which is the original description
which I have to get and store as text in my database.
:tags:
- tag1
- tag2
- tag3
:url: http://example.com
请注意,标记的数组数据是为了便于阅读而缩进的。但是,如果标签在这种特殊情况下没有缩进,那么Ruby的YAML解析器会同样高兴。
您还可以在文本模板中自由使用注释,以提供YAML格式帮助,或记录有效的键或值。例如:
# Make sure to indent descriptions longer than one line!
:description: This is a long text, which is the original description
which I have to get and store as text in my database.
# Valid tag names include tag1..tag9, and the word "quux."
:tags:
- tag1
- tag2
- tag3
# Use a full URI with scheme, and not just a domain name.
:url: http://example.com
使用YAML#load或YAML#load_file将YAML解析为Ruby对象。例如:
require 'yaml'
data1 = YAML.load string_or_here_document
data2 = YAML.load_file '/path/to/yaml/file'
鉴于上面的YAML,在正确解析输入字符串或文件后,您将获得以下Hash对象:
{:description=>
"This is a long text, which is the original description which I have to get and store as text in my database.",
:tags=>["tag1", "tag2", "tag3"],
:url=>"http://example.com"}
然后,您可以像任何其他Hash对象一样访问这些值。例如:
data1[:url]
#=> "http://example.com"
data2[:tags]
#=> ["tag1", "tag2", "tag3"]