繁体   English   中英

匹配单词后跟一对括号的正则表达式

[英]Regular expression to match word followed by a pair of brackets

我有一个字符串是:

str2s = 'orange,juices,apple,apple[-2]'

我正在尝试使用正则表达式而不是使用 str.split() 来提取括号内的所有这些词,所以我想要:

'orange', 'juices', 'apple', 'apple[-2]'

我尝试使用:

re.findall(
    '[A-Za-z][A-Za-z0-9_%\\.]{0,}\[?[a-zA-Z0-9_]*\]?',
    str2s,
    flags=re.IGNORECASE
)

但它只返回:

'orange', 'juices', 'apple', 'apple['

如何获得-2]

您可以从 char a-zA-Z 开始匹配,然后匹配可选的单词字符,并可选地从左方括号匹配到右方括号。

\b[A-Z]\w*(?:\[[^][]*\])?

解释

  • \b防止部分单词匹配的单词边界
  • [AZ]\w*匹配一个字符 a-zA-Z 后跟可选的单词字符
  • (?:非捕获组
  • )? 关闭非捕获组并使其可选

请参阅正则表达式演示Python 演示

import re

str2s = 'orange,juices,apple,apple[-2]'
print(re.findall(r'\b[A-Z]\w*(?:\[[^][]*\])?', str2s, flags=re.I))

输出

['orange', 'juices', 'apple', 'apple[-2]']

为了将字符串拆分为列表,我认为您必须知道确切的分隔符,或者能够识别这些分隔符,即 it 或[,.]或其他分隔符。

如果您不能从项目中定义分隔符,我认为通过常用方法很难实现您的目标。

话虽如此,对于orange,juices,apple,apple[-2] ,您可以使用r'([\w\[\]\-]+)' https://regex101.com/r/ 2Xj7AR/1

以下代码将以您想要的方式提取单词:

import re

words = re.compile(r'\w+\[?-?\d*\]?', re.IGNORECASE)
s = 'orange,juices,apple,apple[-2],pineapple[20]'

words.findall(s)

这将导致以下结果:

['orange', 'juices', 'apple', 'apple[-2]', 'pineapple[20]']

请记住,上面的代码片段是使用您提供的示例字符串作为基础编写的。 如果您需要匹配其他类型的单词(例如007%abc ),则需要调整正则表达式以匹配更多字符。

SELECT RESULT, C1 ||','|| C2 ||','|| C3 || ','|| C4 AS  R_W_APOSTROPHE  
      FROM (        
        
                  
SELECT RESULT,
       REGEXP_REPLACE(REGEXP_SUBSTR(REGEXP_SUBSTR(RESULT,'[^,]+',1,1),'[^09+,].*'),'^|$','''') AS C1,
            REGEXP_REPLACE(REGEXP_SUBSTR(REGEXP_SUBSTR(RESULT,'[^,]+',1,2),'[^09+,].*'),'^|$','''') AS C2,
            REGEXP_REPLACE(REGEXP_SUBSTR(REGEXP_SUBSTR(RESULT,'[^,]+',1,3),'[^09+,].*'),'^|$','''') AS C3,
            REGEXP_REPLACE(REGEXP_SUBSTR(REGEXP_SUBSTR(RESULT,'[^,]+',1,4),'[^09+,].*'),'^|$','''') AS C4  
from (
select 'orange, juices, apple, apple[-2]' as RESULT from dual))

此代码是在 PL/SQL 上编写的,但您可以使用该算法。 也许可以让事情发生在你的脑海中。

  • 首先用撇号拆分为列的开始和结束空间
  • 然后用逗号连接所有列

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM