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
Regex 在这里,单词是一组字母,前面和后面都是非字母_Regex_Unix - Fatal编程技术网

Regex 在这里,单词是一组字母,前面和后面都是非字母

Regex 在这里,单词是一组字母,前面和后面都是非字母,regex,unix,Regex,Unix,我早些时候问过他的问题,但没有一个回答能解决问题。以下是完整的问题: 给出一个UNIX管道,该管道将创建一个文件file1,其中包含file2中的所有单词,每行一个单词。这里单词是一个字母字符串,前面和后面是非字母 我尝试了下面给出的每一个例子,但在使用它们时,我得到了“语法错误” 有人知道我如何解决这个问题吗 谢谢如果您的regex flavor支持,您可以使用lookarounds: (?<![a-zA-Z])[a-zA-Z]+(?![a-zA-Z]) 结果在第2组中 ^[a-zA-

我早些时候问过他的问题,但没有一个回答能解决问题。以下是完整的问题:

给出一个UNIX管道,该管道将创建一个文件file1,其中包含file2中的所有单词,每行一个单词。这里单词是一个字母字符串,前面和后面是非字母

我尝试了下面给出的每一个例子,但在使用它们时,我得到了“语法错误”

有人知道我如何解决这个问题吗


谢谢

如果您的regex flavor支持,您可以使用lookarounds:

(?<![a-zA-Z])[a-zA-Z]+(?![a-zA-Z])
结果在第2组中

^[a-zA-Z]
:字符串开头或非字母字符(除字母外的所有字符)

$
:字符串结尾

或与一个捕获组和两个非捕获组相同:

(?:^|[^a-zA-Z])([a-zA-Z]+)(?:$|[^a-zA-Z])

(第1组的结果)

当你的目标是真正找到单词时,最自然的方法是

\b[A-Za-z]+\b
但是,这假设了正常的单词边界,如空格、某些标点或终端位置。您的需求表明您需要计算“1example2”中的“示例”之类的内容。 在这种情况下,我建议使用

[A-Za-z]+
请注意,您实际上不需要查找字母表前面或后面的内容。这已经捕获了所有字母表,并且只捕获了字母表。贪婪需求(+)确保捕获时不会遗漏任何内容

环顾四周等不应该是必要的,因为你想要捕捉的东西和你想要排除的东西是完全相反的

[编辑:在评论中提供新信息] 下面的方法与Casimir的类似,只是我们排除了终端上的单词(由于您最初的描述,我们明确尝试捕获这些单词)

环顾四周

(?<=[^A-Za-z])[A-Za-z]+(?=[^A-Za-z])

当谈到正则表达式时,您需要在需求方面非常具体和准确。

为了与unicode兼容,您可以使用:

(?:^|\PL)\pL+(?:\PL|$)
\pL
代表任何语言中的任何字母

\PL
\PL

的反面谢谢,我试试。嗯。。。中间的例子似乎有道理。如果有效的话,我会稍后回复。谢谢第一个没用。第二个给了我错误意外标记“^”@Casimir附近出现语法错误。。。这些选项都不起作用。我不断地遇到语法错误。我正在起诉Opensuse。。。任何帮助都将不胜感激谢谢,安库。你的建议的问题是,当我只想找到被非字母包围的字母时,我会对所有字母进行罚款。因此,如果一个文件有以下几行:驴子-03???/donkey2342,那么你的建议会对这两个驴子都很好,但我只想要第二个。你对一个词有一个非常奇怪的定义。我会考虑一个空白或字符串终止,也是一个“非字母”。你应该用“被非字母的字符包围”的措辞。我已经扩展了我的答案——新的答案将排除终端词。希望它能在您使用的正则表达式系统中工作。
[^A-Za-z]([A-Za-z]+)[^A-Za-z]
(?:^|\PL)\pL+(?:\PL|$)