Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式中的星号_Regex - Fatal编程技术网

Regex 正则表达式中的星号

Regex 正则表达式中的星号,regex,Regex,我正在尝试获取文本行中冒号后面的部分。例如,本文中的 previous usc contact name:*assistant director of field education* agency name:*development corporation 我想得到以下信息: assistant director of field education 1010 development corporation 我尝试了下面的正则表达式 .*:\*?(.*)\**$ 它不起作用。目前正

我正在尝试获取文本行中冒号后面的部分。例如,本文中的

previous usc contact name:*assistant director of field education*

agency name:*development corporation
我想得到以下信息:

assistant director of field education

1010 development corporation
我尝试了下面的正则表达式

.*:\*?(.*)\**$ 
它不起作用。目前正在发挥作用的是:

.*:\*?(.*)\*
我不明白为什么它在第二行工作,它没有星号,而regex需要星号。我不明白为什么第一个正则表达式不能正常工作

谢谢。

简而言之:

第二个正则表达式
*:\*?(.*)\*
有效,因为:

*
是否匹配:

  • 以前的usc联系人姓名
  • 机构名称
后跟
:\*
(转义
*
表示:匹配
*

(.*)\*
最终将匹配每个字符串,直到最后一个
*

(假设您错过了最后一行中的星星,则匹配:)

  • 现场教育助理总监
  • 开发公司

第一个正则表达式失败的原因很难从给出的示例中看出
*:\*?(.*)\**$
表示行尾必须是零或多个
*
\**

假设您的换行符与提供的一样,它将只匹配
开发公司
,因为锚定
$
(行尾)在单行模式下通常表示“字符串的结尾”。因此正则表达式只能匹配一次。如果将修饰符更改为多行模式(意味着,
$
匹配每个
\r\n
而不仅仅是字符串的结尾),将提供所需的结果


单线模式,匹配:

  • 开发公司

    *:\*?(.*)\**$


多行模式匹配:

  • 现场教育助理总监
  • 开发公司

    *:\*?(.*)\**$


^
$
的长度取决于修饰符:

给定字符串

Hello
World
在单行模式下使用
^(.*)$
将匹配
Hello World
。在多行模式下使用相同的模式将在两个不同的匹配组中匹配
Hello
World

在单行中,字符串将由正则表达式引擎处理,如

^Hello
World$
在多行模式下,引擎会像线程一样线程化它

^Hello$
^World$

“不工作”是什么意思?你用什么语言?当我在Python中尝试您的第一个正则表达式时,它是有效的-唯一的问题是
*
也与星号匹配。您可以通过在我测试第一行时将其更改为
[^*]*
来修复此问题,因为“$”后面有一个尾随空格字符,但如果我将其去掉,它会工作。您的工作代码末尾是否有空格?还是就在这一页?1<代码>$默认情况下表示字符串结束。如果希望它匹配第2行的末尾,可能需要
多行
标志。确保正则表达式引擎看到逃逸。在源代码的字符串文本中尝试将它们加倍:
'\\'