【问题标题】:Regex Substring preceded by a specific number of any character正则表达式子字符串前面有特定数量的任何字符
【发布时间】:2020-03-06 11:29:10
【问题描述】:

我有一个列表,我想从具有以下模式的元素中提取部分文本:

<Start of string><Less than 30 characters> advocate. versus

我只想要<Start of string><Less than 30 characters> 部分

我认为应该可以工作但没有成功的代码:

a = re.search('^.{,30}advocate. versus', text).group(1)

a = re.search('^(.{,30})advocate. versus', text).group(1)

除了这些,我也试过了

a = re.search('^(.*)advocate. versus', text).group(1)

这行得通,但我只想要少于 30 个字符,而不是任意数量的字符。

例子:

考虑包含两个项目的列表:

['先生。 Rajesh Bhardwaj,辩护律师……上诉人通过高级常务律师 Prem Lata Bansal 女士与辩护律师 Vishnu Sharma 先生。与 PRADEEP KUMAR SAHNI 相比 ..... 受访者没有”,“Vishnu Sharma 先生,倡导者。与 JYOTI APPARELS']

我想从第二个元素中提取文本,该元素在“advocate.vs”之前少于 30 个字符,而不是从第一个元素中提取超过 30 个字符的文本。基本上,我想从第二项中获得这个:

Mr.Vishnu Sharma,

忽略列表中文本的大小写,假设所有内容都是小写的。

任何帮助将不胜感激。

【问题讨论】:

    标签: python regex string


    【解决方案1】:

    这就是您要搜索的内容。您需要量词 {0,30} 中的零。据我了解,您不想抓住拥护者与部分。您可以为此使用前瞻。 If 将检查倡导者是否在那里,但不会捕获它。不要在开始时使用 ^。因为它的意思是“行首”,所以你的比赛不在行首。还要记住 - 正则表达式区分大小写。 “倡导”和“倡导”是两种不同的模式。我制作了一个匹配大小写不尊重的正则表达式

    据我了解,您想要的匹配项前面有一个逗号,我们可以使用它来准确提取您想要的值。基本上是逗号之后和倡导者之前的所有内容。对。

    (?<=,)[^,]{0,30},(?= [Aa]dvocate\. versus)
    

    演示 https://regex101.com/r/cO5wcg/3

    【讨论】:

      猜你喜欢
      • 2018-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-06
      • 1970-01-01
      • 2019-12-25
      • 1970-01-01
      • 2022-11-16
      相关资源
      最近更新 更多