Regex 带有字符串变量的正则表达式问题
我已经研究这个问题太久了,我似乎无法想出一个正则表达式来解决这个问题。我知道我可以使用其他一些编码语言来迭代字符,但我只想使用Stata来完成,而不必使用R或Python。下面是: 我试图解析的字符串通常具有如下设置:Regex 带有字符串变量的正则表达式问题,regex,string,parsing,stata,Regex,String,Parsing,Stata,我已经研究这个问题太久了,我似乎无法想出一个正则表达式来解决这个问题。我知道我可以使用其他一些编码语言来迭代字符,但我只想使用Stata来完成,而不必使用R或Python。下面是: 我试图解析的字符串通常具有如下设置: Name (Type / $## Million / #### ) 其中,有时缺少最后一个结束括号,但如果缺少,则最后一个字符是字符串的结尾。我希望能够匹配括号的内容,但问题是有时名称包含一个括号,如 Bank (other) (... / ... / ...) 而且,有时T
Name (Type / $## Million / #### )
其中,有时缺少最后一个结束括号,但如果缺少,则最后一个字符是字符串的结尾。我希望能够匹配括号的内容,但问题是有时名称包含一个括号,如
Bank (other) (... / ... / ...)
而且,有时Type也有一个插入词,比如
Name (Loan (other) / ... / ...)
基本思想是,我正在寻找包含两个由其他字符分隔的正斜杠的括号集的内容。你知道怎么做吗
到目前为止,我想到的最好的方法是:
\(([^\)]*\/[^\)]*\/.*\)?)$
但是,当集合中有一个括号,我想抓住它时,它就遇到了一个问题。任何帮助都将不胜感激。下面是一些示例行。每一行都应视为一个新字符串
IFC (Equity / $12 Million / 1993
IFC (Equity / $28 Million / 1995)
IFC (Loan / $30 Million / 1995
IFC (Syndication / $40 Million / 1995)
BOAD (Loan / $7 Million / 1995
IFC (Equity / $5 Million / 1997)
IFC (Loan / $13 Million / 1997
MIGA (Guarantees Only) (Guarantee / $30 Million / 1995)
IFC (Equity / $2 Million / 1997
IFC (Syndication / $3 Million / 1997
IFC (Equity / $1 Million / 1998
IFC (Syndication / $12 Million / 1998
IFC (Quasi-equity / $7 Million / 1998
IFC (Risk Management (including Political Risk Insurance) / $1 Million / 1994)
我已经让你的沮丧的表达站住了:通常它会被删掉,因为它与技术问题无关,但在这里寻找一个过于复杂的解决方案是问题的一部分。我经常看到人们在应用基本的字符串命令和函数来解决问题时,会专注于搜索类似于Grail的正则表达式 这是一条进去的路。一些字符串的进一步编辑似乎是首选工具,
split
和subinstr()
clear
input str80 mydata
"IFC (Equity / $12 Million / 1993"
"IFC (Equity / $28 Million / 1995)"
"IFC (Loan / $30 Million / 1995"
"IFC (Syndication / $40 Million / 1995)"
"BOAD (Loan / $7 Million / 1995"
"IFC (Equity / $5 Million / 1997)"
"IFC (Loan / $13 Million / 1997"
"MIGA (Guarantees Only) (Guarantee / $30 Million / 1995)"
"IFC (Equity / $2 Million / 1997"
"IFC (Syndication / $3 Million / 1997"
"IFC (Equity / $1 Million / 1998"
"IFC (Syndication / $12 Million / 1998"
"IFC (Quasi-equity / $7 Million / 1998"
"IFC (Risk Management (including Political Risk Insurance) / $1 Million / 1994)"
end
split mydata, parse(/)
rename (mydata?) (what howmuch when)
destring when, ignore(")") replace
list what how when
+------------------------------------------------------------+
1. | what |
| IFC (Equity |
|------------------------------------------------------------|
| howmuch | when |
| $12 Million | 1993 |
+------------------------------------------------------------+
+------------------------------------------------------------+
2. | what |
| IFC (Equity |
|------------------------------------------------------------|
| howmuch | when |
| $28 Million | 1995 |
+------------------------------------------------------------+
+------------------------------------------------------------+
3. | what |
| IFC (Loan |
|------------------------------------------------------------|
| howmuch | when |
| $30 Million | 1995 |
+------------------------------------------------------------+
+------------------------------------------------------------+
4. | what |
| IFC (Syndication |
|------------------------------------------------------------|
| howmuch | when |
| $40 Million | 1995 |
+------------------------------------------------------------+
+------------------------------------------------------------+
5. | what |
| BOAD (Loan |
|------------------------------------------------------------|
| howmuch | when |
| $7 Million | 1995 |
+------------------------------------------------------------+
+------------------------------------------------------------+
6. | what |
| IFC (Equity |
|------------------------------------------------------------|
| howmuch | when |
| $5 Million | 1997 |
+------------------------------------------------------------+
+------------------------------------------------------------+
7. | what |
| IFC (Loan |
|------------------------------------------------------------|
| howmuch | when |
| $13 Million | 1997 |
+------------------------------------------------------------+
+------------------------------------------------------------+
8. | what |
| MIGA (Guarantees Only) (Guarantee |
|------------------------------------------------------------|
| howmuch | when |
| $30 Million | 1995 |
+------------------------------------------------------------+
+------------------------------------------------------------+
9. | what |
| IFC (Equity |
|------------------------------------------------------------|
| howmuch | when |
| $2 Million | 1997 |
+------------------------------------------------------------+
+------------------------------------------------------------+
10. | what |
| IFC (Syndication |
|------------------------------------------------------------|
| howmuch | when |
| $3 Million | 1997 |
+------------------------------------------------------------+
+------------------------------------------------------------+
11. | what |
| IFC (Equity |
|------------------------------------------------------------|
| howmuch | when |
| $1 Million | 1998 |
+------------------------------------------------------------+
+------------------------------------------------------------+
12. | what |
| IFC (Syndication |
|------------------------------------------------------------|
| howmuch | when |
| $12 Million | 1998 |
+------------------------------------------------------------+
+------------------------------------------------------------+
13. | what |
| IFC (Quasi-equity |
|------------------------------------------------------------|
| howmuch | when |
| $7 Million | 1998 |
+------------------------------------------------------------+
+------------------------------------------------------------+
14. | what |
| IFC (Risk Management (including Political Risk Insurance) |
|------------------------------------------------------------|
| howmuch | when |
| $1 Million | 1994 |
+------------------------------------------------------------+
我已经让你的沮丧的表达站住了:通常它会被删掉,因为它与技术问题无关,但在这里寻找一个过于复杂的解决方案是问题的一部分。我经常看到人们在应用基本的字符串命令和函数来解决问题时,会专注于搜索类似于Grail的正则表达式 这是一条进去的路。一些字符串的进一步编辑似乎是首选工具,
split
和subinstr()
clear
input str80 mydata
"IFC (Equity / $12 Million / 1993"
"IFC (Equity / $28 Million / 1995)"
"IFC (Loan / $30 Million / 1995"
"IFC (Syndication / $40 Million / 1995)"
"BOAD (Loan / $7 Million / 1995"
"IFC (Equity / $5 Million / 1997)"
"IFC (Loan / $13 Million / 1997"
"MIGA (Guarantees Only) (Guarantee / $30 Million / 1995)"
"IFC (Equity / $2 Million / 1997"
"IFC (Syndication / $3 Million / 1997"
"IFC (Equity / $1 Million / 1998"
"IFC (Syndication / $12 Million / 1998"
"IFC (Quasi-equity / $7 Million / 1998"
"IFC (Risk Management (including Political Risk Insurance) / $1 Million / 1994)"
end
split mydata, parse(/)
rename (mydata?) (what howmuch when)
destring when, ignore(")") replace
list what how when
+------------------------------------------------------------+
1. | what |
| IFC (Equity |
|------------------------------------------------------------|
| howmuch | when |
| $12 Million | 1993 |
+------------------------------------------------------------+
+------------------------------------------------------------+
2. | what |
| IFC (Equity |
|------------------------------------------------------------|
| howmuch | when |
| $28 Million | 1995 |
+------------------------------------------------------------+
+------------------------------------------------------------+
3. | what |
| IFC (Loan |
|------------------------------------------------------------|
| howmuch | when |
| $30 Million | 1995 |
+------------------------------------------------------------+
+------------------------------------------------------------+
4. | what |
| IFC (Syndication |
|------------------------------------------------------------|
| howmuch | when |
| $40 Million | 1995 |
+------------------------------------------------------------+
+------------------------------------------------------------+
5. | what |
| BOAD (Loan |
|------------------------------------------------------------|
| howmuch | when |
| $7 Million | 1995 |
+------------------------------------------------------------+
+------------------------------------------------------------+
6. | what |
| IFC (Equity |
|------------------------------------------------------------|
| howmuch | when |
| $5 Million | 1997 |
+------------------------------------------------------------+
+------------------------------------------------------------+
7. | what |
| IFC (Loan |
|------------------------------------------------------------|
| howmuch | when |
| $13 Million | 1997 |
+------------------------------------------------------------+
+------------------------------------------------------------+
8. | what |
| MIGA (Guarantees Only) (Guarantee |
|------------------------------------------------------------|
| howmuch | when |
| $30 Million | 1995 |
+------------------------------------------------------------+
+------------------------------------------------------------+
9. | what |
| IFC (Equity |
|------------------------------------------------------------|
| howmuch | when |
| $2 Million | 1997 |
+------------------------------------------------------------+
+------------------------------------------------------------+
10. | what |
| IFC (Syndication |
|------------------------------------------------------------|
| howmuch | when |
| $3 Million | 1997 |
+------------------------------------------------------------+
+------------------------------------------------------------+
11. | what |
| IFC (Equity |
|------------------------------------------------------------|
| howmuch | when |
| $1 Million | 1998 |
+------------------------------------------------------------+
+------------------------------------------------------------+
12. | what |
| IFC (Syndication |
|------------------------------------------------------------|
| howmuch | when |
| $12 Million | 1998 |
+------------------------------------------------------------+
+------------------------------------------------------------+
13. | what |
| IFC (Quasi-equity |
|------------------------------------------------------------|
| howmuch | when |
| $7 Million | 1998 |
+------------------------------------------------------------+
+------------------------------------------------------------+
14. | what |
| IFC (Risk Management (including Political Risk Insurance) |
|------------------------------------------------------------|
| howmuch | when |
| $1 Million | 1994 |
+------------------------------------------------------------+