- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
这道题是关于“?”操作的。在我之前的问题中,有人错误地将我的问题标记为重复。所以我重新打开这个问题寻求答案。
我想问为什么第一个表达式不从字符串'axxxxxbcd'输出('a', 'b','c','d')。
import re
match = re.findall(r'(a).*?(b)?.*?(c)?(d)','awsssd axxxxxbcd ad adfdfdcdfdd
awsbdfdfdcd')
print (match)
输出[1]: [('a', '', '', 'd'), ('a', '', 'c', 'd'), ('a', '', '', 'd'), ('a', '', '', 'd'), ('a', '', '', 'd')]
import re
match = re.findall(r'(a).*?(b)?(c)?(d)','awsssd axxxxxbcd ad adfdfdcdfdd awsbdfdfdcd')
print (match)
输出[2]: [('a', '', '', 'd'), ('a', 'b', 'c', 'd'), ('a', '' , '', 'd'), ('a', '', '', 'd'), ('a', 'b', '', 'd')]
@艾萨克
最佳答案
通过将正则表达式的每个元素括在捕获括号中,您可以更好地理解正在发生的情况:
import re
rgx1 = re.compile(r'(a)(.*?)(b)?(.*?)(c)?(d)')
m1 = rgx1.search('axxxxxbcd')
print(m1.groups())
输出:
('a', '', None, 'xxxxxb', 'c', 'd')
发生的情况是这样的:
# Group 1: 'a'
# Group 2: capture as little as possible, so we get ''
# Group 3: 'b' is not present, but it's optional, so we get None
# Group 4: 'xxxxxb'
# Group 5: 'c'
# Group 6: 'd'
为什么第 4 组最终会得到内容,而不是第 2 组?最初,它们是相同的,捕获尽可能少的内容(什么都不捕获),但这将导致整个正则表达式失败。因此,引擎必须开始扩展组 2 或组 4。根据这个示例,引擎似乎首先扩展后一组 - 但我不知道这种情况的精确实现规则是什么。为了证明这两个群体确实追求非贪婪策略,您可以在字符串前面添加一个 d
:例如,使用输入文本 axxdxxxbcd
。在这种情况下,第 4 组最终只保留 xx
。
以下方法可能会满足您的要求:
rgx1 = re.compile(r'(a)(?:.*?(b)|.*?)(?:.*?(c)|.*?)(d)')
m1 = rgx1.search('a...b...cd')
print(m1.groups()) # Output: ('a', 'b', 'c', 'd')
但我可能不会那样解决问题。每个(或几乎每个)元素都是可选的正则表达式通常很难正确执行。有时,您最好在几个简单的阶段中解析文本,而不是在一个大的正则表达式中。
关于Python 正则表达式 ?操作: is there a return preference, 0还是1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45993095/
为了使用androidx.preference,我应该将依赖添加到build.gradle 图片 A 来自 https://developer.android.com/jetpack/androidx
我正在尝试从我的应用程序设置 (preferences.xml) 的布局中检索 SeekBarPreference。但是,当我尝试将 findPreference("font_size") 转换为 S
我的需求 拥有一个充满偏好的主屏幕 (main_screen) 单击此 main_screen 中的一个首选项(pref1)会打开一个 设置子屏幕(sub_screen) 在这个 sub_screen
我正在使用 Eclipse 3.7 (Indigo) 作为 Eclipse 插件。该插件将通过产品文件打包为独立应用程序。安装将是多用户安装,如 this link 的场景 2 中所述。 。这样就会有
Preferences.flush() 和 Preferences.sync() 有什么区别? 来自Javadoc(flush()): Forces any changes in the conten
在我的 AppDelegate.m 中,如果用户还没有进入设置面板,我会尝试从我的 Preference Bundle 中初始化默认值。初始化运行,我看到了符合我偏好的正确数量的对象,但它们都是空的,
我有 CheckBoxPreference 和其他 2 个:一个是 Edit Test Pref。另一个是 ListBox Pref。我如何启用列表框首选项和禁用编辑文本首选项。 CheckBoxPr
我想使用“prefer source”选项安装所有由我维护的依赖项,以及使用“prefer dist”选项安装所有其他非我维护的依赖项。 Composer 可以吗?我在想可能有这样的东西,但我找不到:
查看PHP Composer的install命令的帮助,看到以下两个选项 $ composer help install Options: --prefer-source Fo
我无法解决错误的问题: incompatible types: no unique maximal instance exists for type variable T with upper bou
我的任务是使用 POSIX 线程编写读写实现。我想知道我的实现对于这两种情况是否正确: 已删除可怕的尝试 2 号尝试 读者首选: 变量: int readersActive_; sem_t lock_
我正在尝试使用上面的工具栏为我的应用创建一个设置窗口,以输入“后退”按钮等。但是我总是这个错误。 错误 呈现期间引发的异常:android.support.design.widget.AppBarLa
Coverity 实例详细信息: SA 版本:8.6连接:8.7 尝试将缺陷上传到 coverity 实例时,出现以下错误 正在连接到服务器 xxx.xxx.com:9090[错误] SSL 请求失败
在我当前的应用程序中,我已将偏好设置的导入从“android.preference.Preference”更改为“android.support.v7.preference.Preference”,因
在学习旧教程 (Créez des applications pour Android -> openclassroom) 时,我被 PreferenceActivity 类中的这个已弃用的方法 ad
我想在我的应用程序中使用“API Demos/app/preferences/1.preferences from XML”布局,但我不知道在哪里可以找到源文件。我在 API 演示示例中进行了搜索,但
我必须使用 weblogic.xml 在 Weblogic 12c 服务器 (12.2.1) 上 它是基于 Jersey 1.9 的 REST 应用程序。 (Jersey 1.x JAX-RS RI)
我有一些简单的代码,我正在使用它来学习使用路标库的 OAuth 身份验证。我正在尝试使用 java.util.prefs.Preferences 将请求 token 、 token secret 和
如果没有特殊要求,我们可以使用android提供的框架来创建系统样式的preference screen,在其内部可以包含preferencecategory和preference<con
我需要基于另一个应用构建一个应用。在我的 PreferenceScreen 中,我有 2 个 ListPreference 对象。第二个依赖于第一个并禁用,直到选择第一个(仍然需要弄清楚) 我想将第一
我是一名优秀的程序员,十分优秀!