非常感謝您閱讀本問題。 我正試圖在R中編寫一個通用的多目的函數來處理特定結構中的文本。 讓我描述我想用一個例子(我想寫到這裏ReadDB
功能)的例子的發明文本語法
ReadDB <- function(query, ...){
...
}
text = "I'm Mahdi; {[What's your name?] Nice to see you <name>.}"
ReadDB(query = text, name = "Mark")
# output is : I'm Mahdi; Nice to see you Mark.
ReadDB(query = text)
# output is : I'm Mahdi; What's your name?
ReadDB(query = text, Age = 22)
# warning is : Age Argument is not used!
# output is : I'm Mahdi; What's your name?
描述:
- 在文本中的每個塊由
{
和}
包圍。 - 每個參數在兩側都標識爲
<
和>
。 - 如果塊中定義的參數是由用戶爲該函數確定的,則
[
和]
之間的短語將在塊內移除,並且<arg>
將被替換爲確定的值。否則除了[
和]
以外的所有內容都將被刪除。
更復雜的例子是當一個塊內有另一個塊時,我們期望在這個等式中做與()
算子相同的優先級。
更新:
我增加了更多的複雜的形勢與嵌套{{
,如下:
text = "I'm Mahdi; {[What's your name?] Nice to see you <name>.{I live in <city>.}}"
ReadDB(query = text, name = "Mark")
# output is : I'm Mahdi; Nice to see you Mark.
ReadDB(query = text)
# output is : I'm Mahdi; What's your name?
ReadDB(query = text, city = "St. Louis", name="Mahdi")
# output is : I'm Mahdi; Nice to see you Mark. I live in St. Louis.
ReadDB(query = text, city = "St. Louis")
# output is : I'm Mahdi; What's your name?
注意,當默認未裏面{}
給它是空的。因此text = {[]I live in <city>.}
與text = {I live in <city>.}
相同。
'sprintf'是用在這裏。使用'%s'子字符串。 – 2014-12-03 00:20:41