如何在Python中使用带有字符异常的多行DOTALL

2024-01-22

我必须在 python 中找到多线模式。所以我使用正则表达式中的 DOTALL 但它发现的内容超出了我的需要。

样本文件:

if(condition_1)
{
....
some text
some text

if ((condition_1== condition_2)   ||
                 (condition_3== condition_4) ||
           (condition_6== condition_5)  ||
     (condition_7== condition_8)   ) // XYZ_variable
{
...

我的 python 正则表达式如下

re.compile(r'(if\s*?\()(.*?)(\/\/\s*?)(XYZ_variable)', re.DOTALL)

这是从第一个 if 条件直到 XYZ_variable 找到的,但我只需要第二个 if 条件,其中 XYZ_variable 存在。

所以我按如下方式更改了我的正则表达式,但它不起作用

re.compile(r'(if\s*?\()([^\{].*?)(\/\/\s*?)(XYZ_variable)', re.DOTALL)

我的最终输出应该是这样的

if(condition_1)
    {
    ....
    some text
    some text

    if (((condition_1== condition_2)   ||
                     (condition_3== condition_4) ||
               (condition_6== condition_5)  ||
         (condition_7== condition_8)   ) || XYZ_variable )
    {
    ...

但我的正则表达式做了类似的事情

if ((condition_1)
        {
        ....
        some text
        some text

        if ((condition_1== condition_2)   ||
                         (condition_3== condition_4) ||
                   (condition_6== condition_5)  ||
             (condition_7== condition_8)   ) || XYZ_variable )
        {
        ...

您可以使用

re.sub(r'(?m)^(\s*if\s*)(\(.*(?:\n(?!\s*if\s*\().*)*)//\s*(\w+)\s*$', r'\1(\2 || \3)', s)

See the 正则表达式演示 https://regex101.com/r/eDvGHp/2/.

Details

  • (?m) - re.M flag
  • ^- 一行的开头
  • (\s*if\s*)- 第 1 组:if包含 0+ 个空格
  • (\(.*(?:\n(?!\s*if\s*\().*)*) - Group 2:
    • \( - a (
    • .*- 该行的其余部分
    • (?:\n(?!\s*if\s*\().*)* - 0 or more repetitions of
      • \n(?!\s*if\s*\()- 换行符 LF,后面不跟if用 0+ 空格括起来,然后是(
      • .*- 该行的其余部分
  • //\s* - //和 0+ 空格
  • (\w+)- 第 3 组:1 个或多个单词字符
  • \s*$- 0+ 空格和行尾。

Python演示 https://rextester.com/XPON48451:

import re
s = """if(condition_1)
{
....
some text
some text

if ((condition_1== condition_2)   ||
                 (condition_3== condition_4) ||
           (condition_6== condition_5)  ||
     (condition_7== condition_8)   ) // XYZ_variable
{
..."""
print( re.sub(r'(?m)^(\s*if\s*)(\(.*(?:\n(?!\s*if\s*\().*)*)//\s*(\w+)\s*$', r'\1(\2 || \3)', s) ) 

Output:

if(condition_1)
{
....
some text
some text

if (((condition_1== condition_2)   ||
                 (condition_3== condition_4) ||
           (condition_6== condition_5)  ||
     (condition_7== condition_8)   )  || XYZ_variable)
{
...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Python中使用带有字符异常的多行DOTALL 的相关文章

随机推荐

  • PHP 变量大小有限制吗?

    我需要知道 PHP 是否有可变的限制大小 我从 SQL 数据库中获取一个字符串字段并使用echo在网页上查看它 我遇到的问题是 当我查看网页时 我看不到数据库字段中的所有内容 PHP 变量的大小有限制吗 有没有办法让 PHP 从数据库中读取
  • 如何使用 Ninject 将服务注入授权过滤器?

    我正在使用 asp net mvc 3 ninject 2 0 和 ninject mvc 3 插件 我想知道如何将服务层放入我的过滤器中 在本例中是授权过滤器 我喜欢进行构造函数注入 所以这是可能的还是我必须进行属性注入 Thanks E
  • 当 cfn 模板和管道都是使用 AWS CDK 创建时,如何使用 CodePipeline 部署 CloudFormation 堆栈?

    我使用 AWS CDK 创建了一个带有自动扩展组的简单堆栈 并定义了启动配置资源以在 ec2 实例创建期间执行一些 powershell 脚本 这些脚本位于同一个 cdk typescript 项目中 我使用 aws s3 asset 构造
  • UICollectionView 最后一个单元格未对齐

    我是 iOS 新手 现在遇到一个问题 我的目标是获得一个带有过滤按钮的滑动条 我有一个 UICollectionView 作为其他视图中的子视图 除了最后一个单元格之外 所有视图都显示良好 这是 uicollectionview 的委托和日
  • 当我在平面上嵌入平面图时,如何找到包含预定义点的面

    我有一个嵌入在平面上的平面图 平面图 并且想要搜索它的面 该图不是连接的 而是由多个连接的图组成 这些图不能单独寻址 例如 子图可以包含在另一个图的表面中 我想找到包含某个二维点的多边形 面 多边形由图形的面形成 由于面孔数量相当大 我想避
  • 如何杀死扭曲的协议实例python

    我有一个使用 Twisted 用 python 编写的服务器应用程序 我想知道如何终止我的协议 bottalk 的实例 每次我获得新的客户端连接时 我都会在内存中看到该实例 print Factory clients 但是假设我想从服务器端
  • 如何将sql参数作为整数数据类型变量中的空值传递?

    如何将 sql 参数作为空值传递给整数数据类型变量 StockBO sBO new StockBO sBO Mode 2 if ddcmpanyname SelectedIndex 0 sBO Client id Convert ToInt
  • 如何检查引用的程序集在运行时是否可用?

    我正在创建一个简单的 独立的 net winforms 应用程序 它引用了程序集Microsoft SqlServer SqlWmiManagement Net Framework 4 的版本可能存在或不存在于客户端计算机上 如果该程序集不
  • 如何使用 es6 import 加载 emscripten 生成的模块?

    我正在尝试导入使用 emscripten 生成的模块作为 es6 模块 我正在尝试与基本示例 https kripken github io emscripten site docs porting connecting cpp and j
  • 跨多列排序 (Perl)

    对于以下代码 我将如何对多个列进行排序 目前 代码 1 得到一个 lista 中的文件数 directory2 使用正则表达式获取 fileName fileLocation and fileSize对于中的每个元素 list3 将 2 中
  • 数据注释验证属性中的 string.Format

    有没有办法使用格式化字符串而不是直接常量来设置数据注释消息 我需要像下面的代码一样设置必填字段 ErrorMessage 但它给了我一个错误 Required ErrorMessage string Format SystemMessage
  • Hyperledger Composer 点对点连接未建立

    我们使用 Hyperledger Composer 建立了一个业务网络 并通过创建对等点来创建参与者卡 当我们在导入参与者卡后尝试将对等方连接到本地的另一台计算机时 我收到以下错误 错误 尝试登录并获取用户上下文时出错 错误 尝试时出错 注
  • 运行 GO111MODULE=on go install 。 ./cmd/... 在云初始化中

    我有一个使用 cloud init 部署的 bash 脚本 我的 bash 脚本包含以下部分代码 GO111MODULE on go install cmd 当直接在已部署服务器的终端中运行我的 bash 脚本时 它按预期工作 但是当我在云
  • 我应该如何管理基于 Xml 的文档的不同不兼容格式

    我有一个应用程序 它以基于 Xml 的格式保存文档 例如 Word 文档 目前 从 xsd 文件生成的 C 类用于读取 写入文档格式 一切都很好 直到最近我不得不更改以下格式 该文件 我担心的是我的应用程序的未来版本的向后兼容性need能够
  • Ionic:如何不堆叠多个 toast 通知?

    我得到了以下 Ionic 代码片段 用于在工业应用程序中显示警报 错误 showError message string let toast this toastController create message message posit
  • Phpunit骨架生成器找不到扩展类

    我有一个基于 Zend Framework 的应用程序 我尝试使用 phpunit 生成测试用例的框架 Phpunit 似乎无法找到我尝试生成的类的父类 phpunit skeleton test Default Model Person
  • TFS 构建期间未找到程序集

    遇到问题的是项目在本地编译得很好 但 TFS 构建报告找不到程序集 日志文件将显示 2 gt C 程序文件 x86 MSBuild 12 0 bin amd64 Microsoft Common CurrentVersion targets
  • 如何将列聚合到 JSON 数组中?

    如何转换如下数据以便将数据存储在 ElasticSearch 中 这是一个 bean 数据集 我将按产品将其聚合到 JSON 数组中 List
  • 使用 MSBuild 从命令行生成用于 ClickOnce 部署的 setup.exe

    我有一个 MSBuild 脚本 用于构建 Windows 窗体应用程序 生成应用程序清单并对其进行签名 然后生成部署清单 该脚本还为我生成publish htm 文件 现在我需要生成 setup exe 文件 到目前为止我还无法弄清楚 VS
  • 如何在Python中使用带有字符异常的多行DOTALL

    我必须在 python 中找到多线模式 所以我使用正则表达式中的 DOTALL 但它发现的内容超出了我的需要 样本文件 if condition 1 some text some text if condition 1 condition